Création et modification de colonnes d'identification

Vous pouvez utiliser une colonne d'identification pour créer un numéro d'identification à incrémentation automatique dans une table. Vous ne pouvez créer qu'une colonne d'identification et une colonne GUID pour chaque table.

Propriété IDENTITY

Vous pouvez mettre en œuvre des colonnes d'identification à l'aide de la propriété IDENTITY. Ceci autorise le développeur à spécifier à la fois un numéro d'identité pour la première ligne insérée dans la table (propriété Identity Seed) et un incrément (propriété Identity Increment) à ajouter à la valeur de départ afin de déterminer les numéros d'identité suivants. Si vous insérez des valeurs dans une table dotée d'une colonne d'identification, le Moteur de base de données génère automatiquement la valeur d'identité suivante en ajoutant l'incrément à la valeur de départ. Lorsque vous ajoutez des colonnes d'identification à des tables existantes, les numéros d'identité sont ajoutés aux lignes existantes de la table et les valeurs de départ et d'incrément sont appliquées dans l'ordre dans lequel ces lignes ont été insérées initialement. Les numéros d'identité sont également générés pour toutes les nouvelles lignes ajoutées. Vous ne pouvez pas modifier une colonne de table existante et y ajouter la propriété IDENTITY.

Lorsque vous utilisez la propriété IDENTITY pour définir une colonne d'identification, tenez compte des éléments suivants :

  • Une table ne peut comprendre qu'une colonne définie à l'aide de la propriété IDENTITY, et cette colonne doit être définie à l'aide d'un type de données decimal, int, numeric, smallint, bigint ou tinyint.

  • Vous pouvez spécifier la valeur de départ et l'incrément. La valeur par défaut est 1 dans les deux cas.

  • La colonne d'identification ne doit ni accepter les valeurs NULL, ni contenir une définition ou un objet DEFAULT.

  • La colonne peut être référencée dans une liste de sélection par l'emploi du mot clé $IDENTITY après la définition de la propriété IDENTITY. La colonne peut également être référencée par son nom.

  • Vous pouvez utiliser la fonction OBJECTPROPERTY pour déterminer si une table comporte une colonne IDENTITY et la fonction COLUMNPROPERTY pour définir le nom de la colonne IDENTITY.

  • SET IDENTITY_INSERT peut être utilisé pour désactiver la propriété IDENTITY d'une colonne en activant les valeurs à insérer explicitement.

    Notes

    S'il existe une colonne d'identification pour une table qui est sujette à des suppressions fréquentes, des écarts peuvent survenir entre les valeurs d'identité. Les valeurs d'identité supprimées ne sont pas réutilisées. Pour éviter de tels écarts, n'utilisez pas la propriété IDENTITY. En lieu et place, vous pouvez créer un déclencheur qui détermine une nouvelle valeur d'identification, basée sur les valeurs existant dans la colonne d'identification, à mesure que des lignes sont insérées.

Identificateurs globaux uniques (GUID, Globally Unique Identifiers)

Bien que la propriété IDENTITY automatise la numérotation des lignes au sein d'une table, des tables distinctes (dont chacune avec sa propre colonne d'identification) peuvent générer les mêmes valeurs. En effet, la propriété IDENTITY est garantie comme étant unique seulement pour la table sur laquelle elle est utilisée. Si une application doit générer une colonne d'identification unique au sein de la base de données, ou de toutes les bases de données de tous les ordinateurs reliés en réseau à travers le monde, utilisez le type de données uniqueidentifier et la fonction NEWID ou NEWSEQUENTIALID(). De plus, vous pouvez appliquer la propriété ROWGUIDCOL pour indiquer que la nouvelle colonne est une colonne GUID de ligne. Contrairement aux colonnes définies avec la propriété IDENTITY, le Moteur de base de données ne génère pas automatiquement des valeurs pour une colonne de type uniqueidentifier. Pour insérer une valeur globale unique, créez une définition DEFAULT sur la colonne qui utilise la nouvelle fonction NEWID ou NEWSEQUENTIALID pour générer cette valeur. Pour plus d'informations, consultez Utilisation des données uniqueidentifier.

Une colonne avec la propriété ROWGUICOL peut être référencée dans une liste de sélection par l'emploi du mot clé $ROWGUID. (de même qu'une colonne IDENTITY peut être référencée à l'aide du mot clé $RIDENTITY). Une table ne peut comporter qu'une seule colonne ROWGUIDCOL, laquelle doit être définie avec le type de données uniqueidentifier. Vous pouvez utiliser la fonction OBJECTPROPERTY (Transact-SQL) pour déterminer si une table comporte une colonne ROWGUIDCOL et la fonction COLUMNPROPERTY (Transact-SQL) pour définir le nom de la colonne ROWGUIDCOL.

L'exemple suivant crée une table avec une colonne uniqueidentifier en tant que clé primaire. Cet exemple utilise la fonction NEWSEQUENTIALID() de la contrainte DEFAULT afin de fournir des valeurs pour les nouvelles colonnes. La propriété ROWGUIDCOL est appliquée à la colonne uniqueidentifier de sorte qu'elle peut être référencée en utilisant la clé $ROWGUID.

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

Pour créer une nouvelle colonne d'identification lors de la création d'une table

CREATE TABLE (Transact-SQL)

Pour créer une nouvelle colonne d'identification sur une table existante

ALTER TABLE (Transact-SQL)

Pour supprimer une colonne d'identification

ALTER TABLE (Transact-SQL)

Procédure : supprimer des colonnes d'une table (Visual Database Tools)

Pour obtenir des informations sur les colonnes d'identité

sys.identity_columns (Transact-SQL)

IDENT_INCR (Transact-SQL)

IDENT_SEED (Transact-SQL)

Pour vérifier et corriger la valeur d'identité actuelle d'une table spécifiée

DBCC CHECKIDENT (Transact-SQL)

Pour définir une nouvelle valeur de départ

DBCC CHECKIDENT (Transact-SQL)