INSÉRER une colonne avec IDENTITY défini

Page mise à jour :
Date de création de la page :

SQL Server possède une propriété « IDENTITY » qui définit automatiquement le numéro séquentiel de 1 à une colonne spécifique lorsque vous ajoutez un enregistrement. Par exemple, si vous définissez IDENTITY dans la colonne A et ajoutez 3 enregistrements, la colonne A est automatiquement renseignée avec les valeurs 1, 2 et 3 dans l’ordre dans lequel vous les avez ajoutées.

Même si vous utilisez une instruction INSERT, la valeur est définie automatiquement, il n’est donc pas nécessaire de définir explicitement la valeur, mais je pense qu’il y a des cas où vous voulez définir la valeur explicitement car elle est utilisée pour une clé étrangère, etc.

Par exemple, supposons qu’il existe une table avec la propriété « IDENTITY » définie dans la colonne « ID », comme indiqué dans la figure.

Une instruction INSERT qui insère une valeur dans cette table, y compris la colonne ID, ressemblerait à ceci :

insert into [テーブル名] ([ID], [Value]) values (1, 1)

Cependant, lorsque j’essaie de l’exécuter, je pense que l’erreur suivante apparaîtra.

Msg 544, Niveau 16, État 1, Ligne 1 Lorsque IDENTITY_INSERT est défini sur OFF, les valeurs explicites ne peuvent pas être insérées dans la colonne d’identité de la table 'XXXXX'.

Les colonnes qui sont définies à l’origine sur IDENTITY sont supposées avoir des valeurs définies automatiquement, de sorte que vous ne pouvez pas définir explicitement les valeurs.

Si vous voulez vraiment le définir, vous devez définir « IDENTITY_INSERT » sur « ON » comme décrit dans le message d’erreur. Activez IDENTITY_INSERT avant INSERTING, puis revenez à OFF lorsque l’insertion est terminée, comme dans le code SQL suivant :

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

Vous pouvez maintenant définir explicitement la valeur et l’INSÉRER. INSERT-SELECT à l’aide de tables est également valide.

Les colonnes avec IDENTITY se voient automatiquement attribuer des valeurs à partir de 1, mais si vous définissez explicitement les valeurs comme décrit ci-dessus, vous vous demandez peut-être quel numéro sera attribué ensuite. Dans ce cas, la valeur suivante attribuée est attribuée à partir du numéro après la valeur la plus élevée ajoutée à la table, de sorte qu’il n’y a pas de valeur en double lorsqu’un nouvel enregistrement est inséré. (Cependant, il existe des exceptions dues à des handicaps, etc.)