web-dev-qa-db-fra.com

Comment activer et désactiver IDENTITY_INSERT à l'aide de SQL Server 2008?

Pourquoi est-ce que je reçois une erreur en faisant une insertion quand IDENTITY_INSERT est réglé sur OFF?

Comment l'activer correctement dans SQL Server 2008? Est-ce en utilisant SQL Server Management Studio?

J'ai lancé cette requête:

SET IDENTITY_INSERT Database. dbo. Baskets ON

Ensuite, j'ai reçu le message dans la console que la ou les commandes ont été exécutées avec succès. Cependant, lorsque j'exécute l'application, le message d'erreur ci-dessous s'affiche:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
406
Beginner

Via SQL selon MSDN

SET IDENTITY_INSERT sometableWithIdentity ON

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF

Le message d'erreur complet vous dit exactement ce qui ne va pas ...

Impossible d'insérer une valeur explicite pour la colonne d'identité dans la table 'sometableWithIdentity' lorsque IDENTITY_INSERT est défini sur OFF.

687
gbn

J'ai eu un problème qui ne me permettait pas de l'insérer même après l'activation de IDENTITY_INSERT.

Le problème était que je n'avais pas spécifié les noms des colonnes et que, pour une raison quelconque, cela ne l'aimait pas.

INSERT INTO tbl Values(vals)

Donc, fondamentalement, faites le plein INSERT INTO tbl (cols) Values ​​(vals)

52
Ismael

Import: Vous devez écrire des colonnes dans l'instruction INSERT

INSERT INTO TABLE
SELECT * FROM    

N'est pas correcte.

Insert into Table(Field1,...)
Select (Field1,...) from TABLE

Est correct

33
R.Alonso

Je sais que c'est un fil plus ancien, mais je me suis heurté à cela. Si l'utilisateur tente d'exécuter des insertions dans la colonne Identity après une autre session, définissez IDENTITY_INSERT ON, il est alors lié à l'erreur ci-dessus.

La définition de la valeur Insertion d'identité et des commandes Insérer DML suivantes doit être exécutée par la même session.

Ici, @Beginner définissait Identity Insert sur séparément, puis exécutait les insertions à partir de son application. C'est pourquoi il a eu l'erreur ci-dessous:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
5
aok

Il ne semble pas nécessaire de mettre une base de données SET IDENTITY_INSERT. dbo. Paniers ON; avant chaque lot d'envoi SQL INSERT./Vous pouvez envoyer plusieurs commandes INSERT ... VALUES .. commencées avec un SET IDENTITY_INSERT ... ON; chaîne au début. Il suffit de ne mettre aucun séparateur de lot entre/je ne sais pas pourquoi SET IDENTITY_INSERT ... ON cesse de fonctionner après le bloc d'envoi (par exemple: .ExecuteNonQuery () dans c #) ... J'ai dû mettre SET IDENTITY_INSERT ... ON; à nouveau au début de la prochaine chaîne de commande SQL.

0
Jettero

Cela est probable lorsque vous avez un champ PRIMARY KEY et que vous insérez une valeur en double ou que l'indicateur INSERT_IDENTITY est défini sur on

0
seanyp20001