sql >> Database >  >> RDS >> Sqlserver

IDENTITY() vs IDENTITY() in SQL Server:wat is het verschil?

Het lijkt misschien vreemd, maar T-SQL heeft een IDENTITY() eigenschap en een IDENTITY() functie, die elk een (vergelijkbaar, maar) ander doel dienen.

  • De IDENTITY() eigenschap maakt een identiteitskolom in een tabel. Een identiteitskolom bevat een automatisch oplopend identificatienummer. Deze eigenschap wordt gebruikt met de CREATE TABLE en ALTER TABLE verklaringen.
  • De IDENTITY() functie wordt echter alleen gebruikt in een SELECT statement met een INTO table-clausule om een ​​identiteitskolom in een nieuwe tabel in te voegen.

Er is ook de SQL-DMO Identity eigenschap die de rij-identiteitseigenschap van een kolom blootlegt, maar dat zal ik hier niet behandelen. Microsoft adviseert dat deze eigenschap zal worden verwijderd in een toekomstige versie van SQL Server, en dat u deze eigenschap moet vermijden bij nieuw ontwikkelingswerk.

IDENTITY() Eigenschap

Hier is een voorbeeld van het gebruik van de IDENTITY() eigendom.

CREATE TABLE Pets (
    PetId int IDENTITY(1,1) PRIMARY KEY, 
    PetName varchar(255)
    );

Deze code maakt een tabel met twee kolommen. De eerste kolom (PetId ) is een identiteitskolom (omdat ik de IDENTITY() . gebruik eigenschap in zijn definitie).

Nu ik een identiteitskolom heb gemaakt, kan ik huisdiernamen invoegen in de PetName kolom zonder dat u voor elke rij een ID hoeft op te nemen.

INSERT INTO Pets (PetName)
VALUES ('Homer'), ('Felix'), ('Ruff');

SELECT * FROM Pet;

Resultaat:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Homer     |
| 2       | Felix     |
| 3       | Ruff      |
+---------+-----------+

In dit geval begint de nummering bij 1 en wordt elke rij verhoogd met 1. Dit komt omdat ik IDENTITY(1,1) heb gebruikt om aan te geven dat de beginwaarde 1 is en dat deze op elke nieuwe rij met 1 wordt verhoogd.

IDENTITY() Functie

Zoals gezegd, de IDENTITY() functie wordt gebruikt in een SELECT INTO uitspraak. Hier is een voorbeeld van het gebruik van de IDENTITY() functie.

SELECT 
  IDENTITY(int, 101, 10) AS pet_id,
  PetName AS pet_name
INTO BestFriends
FROM Pets;

SELECT * FROM BestFriends;

Resultaat:

+----------+------------+
| pet_id   | pet_name   |
|----------+------------|
| 101      | Homer      |
| 111      | Felix      |
| 121      | Ruff       |
+----------+------------+

Hier heb ik een tabel gemaakt met de naam BestFriends en vulde het vanuit de Pets tafel.

In dit geval begon ik de telling bij 101 en verhoogde deze met 10. Merk ook op dat de functie het eerste argument nodig heeft om het gegevenstype van de kolom te specificeren.


  1. Verwijder meerdere rijen door selectievakjes te selecteren met PHP

  2. MySQL-prestaties:MySQL/MariaDB-indexen

  3. Kun je een webservice aanroepen vanuit TSQL-code?

  4. PostgreSQL-triggers en basisfuncties voor opgeslagen functies