Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

IDENTITY() vs IDENTITY() dans SQL Server :Quelle est la différence ?

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 le CREATE TABLE et ALTER TABLE déclarations.
  • Le IDENTITY() Cependant, la fonction n'est utilisée que dans un SELECT instruction avec un INTO 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.