Cela peut sembler étrange, mais T-SQL a un IDENTITY()
propriété et un IDENTITY()
fonction, chacune ayant un but (similaire, mais) différent.
- Le
IDENTITY()
La propriété crée une colonne d'identité dans une table. Une colonne d'identité contient un numéro d'identification qui s'incrémente automatiquement. Cette propriété est utilisée avec leCREATE TABLE
etALTER TABLE
déclarations. - Le
IDENTITY()
Cependant, la fonction n'est utilisée que dans unSELECT
instruction avec unINTO
clause de table pour insérer une colonne d'identité dans une nouvelle table.
Il y a aussi le SQL-DMO Identity
propriété qui expose la propriété d'identité de ligne d'une colonne, mais je ne couvrirai pas cela ici. Microsoft vous informe que cette propriété sera supprimée dans une future version de SQL Server et que vous devez éviter de l'utiliser dans de nouveaux travaux de développement.
Propriété IDENTITY()
Voici un exemple d'utilisation de IDENTITY()
propriété.
CREATE TABLE Pets ( PetId int IDENTITY(1,1) PRIMARY KEY, PetName varchar(255) );
Ce code crée une table avec deux colonnes. La première colonne (PetId
) est une colonne d'identité (parce que j'utilise le IDENTITY()
propriété dans sa définition).
Maintenant que j'ai créé une colonne d'identité, je peux insérer des noms d'animaux dans le PetName
colonne sans avoir besoin d'inclure un ID pour chaque ligne.
INSERT INTO Pets (PetName) VALUES ('Homer'), ('Felix'), ('Ruff'); SELECT * FROM Pet;
Résultat :
+---------+-----------+ | PetId | PetName | |---------+-----------| | 1 | Homer | | 2 | Felix | | 3 | Ruff | +---------+-----------+
Dans ce cas, la numérotation commence à 1 et chaque ligne est incrémentée de 1. C'est parce que j'ai utilisé IDENTITY(1,1)
pour spécifier que la valeur de départ est 1 et qu'elle est incrémentée de 1 à chaque nouvelle ligne.
Fonction IDENTITY()
Comme mentionné, le IDENTITY()
la fonction est utilisée dans un SELECT INTO
déclaration. Voici un exemple d'utilisation de IDENTITY()
fonction.
SELECT IDENTITY(int, 101, 10) AS pet_id, PetName AS pet_name INTO BestFriends FROM Pets; SELECT * FROM BestFriends;
Résultat :
+----------+------------+ | pet_id | pet_name | |----------+------------| | 101 | Homer | | 111 | Felix | | 121 | Ruff | +----------+------------+
Ici, j'ai créé une table appelée BestFriends
et rempli à partir des Pets
table.
Dans ce cas, j'ai commencé le décompte à 101 et je l'ai incrémenté de 10. Notez également que la fonction nécessite le premier argument pour spécifier le type de données de la colonne.