IDENTITY (Propriété) (Transact-SQL)

Crée une colonne d'identité dans une table. Cette propriété est utilisée avec les instructions Transact-SQL CREATE TABLE et ALTER TABLE.

[!REMARQUE]

La propriété IDENTITY diffère de la propriété SQL-DMO Identity qui représente la propriété d'identité de lignes d'une colonne.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

IDENTITY [ (seed , increment) ]

Arguments

  • seed
    Valeur utilisée pour la toute première ligne chargée dans la table.

  • increment
    Valeur d'incrément ajoutée à la valeur d'identité de la ligne précédemment chargée.

Vous devez spécifier à la fois la valeur initiale et l'incrément, ou aucune des deux. Si vous n'en spécifiez aucune, la valeur par défaut est (1,1).

Notes

S'il existe une colonne d'identité pour une table qui est sujette à des suppressions fréquentes, des écarts peuvent survenir entre les valeurs d'identité. Si cela pose problème, n'utilisez pas la propriété IDENTITY. Cependant, afin de vous assurer qu'aucun écart n'a été créé ou pour combler un écart existant, évaluez les valeurs d'identité existantes avant d'en entrer une explicitement à l'aide de SET IDENTITY_INSERT ON.

Si vous réutilisez une valeur d'identité supprimée, utilisez le code exemple de l'Exemple B afin de rechercher la valeur d'identité suivante disponible. Remplacez tablename, column_type et MAX(column_type) - 1 par le nom d'une table, un type de données de la colonne d'identité et une valeur numérique maximale admise (pour ce type de donnée) -1.

Utilisez DBCC CHECKIDENT pour vérifier la valeur d'identité actuelle et la comparer à la valeur maximale dans la colonne d'identité.

Si une table possédant une colonne d'identité est publiée pour la réplication, la colonne doit être gérée de manière à ce qu'elle soit compatible avec le type de réplication utilisée. Pour plus d'informations, consultez Réplication de colonnes d'identité.

Exemples

A. Utilisation de la propriété IDENTITY avec CREATE TABLE

L'exemple suivant crée une nouvelle table avec la propriété IDENTITY pour incrémenter automatiquement un numéro d'identification.

USE AdventureWorks
IF OBJECT_ID ('dbo.new_employees', 'U') IS NOT NULL
   DROP TABLE new_employees
GO
CREATE TABLE new_employees
(
 id_num int IDENTITY(1,1),
 fname varchar (20),
 minit char(1),
 lname varchar(30)
)

INSERT new_employees
   (fname, minit, lname)
VALUES
   ('Karin', 'F', 'Josephs')

INSERT new_employees
   (fname, minit, lname)
VALUES
   ('Pirkko', 'O', 'Koskitalo')

B. Utilisation d'une syntaxe générique afin de trouver des écarts entre les valeurs d'identité

L'exemple suivant illustre une syntaxe générique qui permet de trouver des écarts entre les valeurs d'identité lorsque des données sont supprimées.

[!REMARQUE]

La première partie du script Transact-SQL suivant sert uniquement d'illustration. Vous pouvez exécuter le script Transact-SQL qui commence par le commentaire : -- Create the img table.

-- Here is the generic syntax for finding identity value gaps in data.
-- The illustrative example starts here.
SET IDENTITY_INSERT tablename ON
DECLARE @minidentval column_type
DECLARE @maxidentval column_type
DECLARE @nextidentval column_type
SELECT @minidentval = MIN($IDENTITY), @maxidentval = MAX($IDENTITY)
    FROM tablename
IF @minidentval = IDENT_SEED('tablename')
   SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('tablename')
   FROM tablename t1
   WHERE $IDENTITY BETWEEN IDENT_SEED('tablename') AND 
      @maxidentval AND
      NOT EXISTS (SELECT * FROM tablename t2
         WHERE t2.$IDENTITY = t1.$IDENTITY + 
            IDENT_INCR('tablename'))
ELSE
   SELECT @nextidentval = IDENT_SEED('tablename')
SET IDENTITY_INSERT tablename OFF
-- Here is an example to find gaps in the actual data.
-- The table is called img and has two columns: the first column 
-- called id_num, which is an increasing identification number, and the 
-- second column called company_name.
-- This is the end of the illustration example.

-- Create the img table.
-- If the img table already exists, drop it.
-- Create the img table.
IF OBJECT_ID ('dbo.img', 'U') IS NOT NULL
   DROP TABLE img
GO
CREATE TABLE img (id_num int IDENTITY(1,1), company_name sysname)
INSERT img(company_name) VALUES ('New Moon Books')
INSERT img(company_name) VALUES ('Lucerne Publishing')
-- SET IDENTITY_INSERT ON and use in img table.
SET IDENTITY_INSERT img ON

DECLARE @minidentval smallint
DECLARE @nextidentval smallint
SELECT @minidentval = MIN($IDENTITY) FROM img
 IF @minidentval = IDENT_SEED('img')
    SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('img')
    FROM img t1
    WHERE $IDENTITY BETWEEN IDENT_SEED('img') AND 32766 AND
      NOT    EXISTS (SELECT * FROM img t2
          WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('img'))
 ELSE
    SELECT @nextidentval = IDENT_SEED('img')
SET IDENTITY_INSERT img OFF