Comment activer et désactiver L'insertion D'identité en utilisant SQL Server 2008?

Pourquoi est-ce que je reçois une erreur en faisant un insert lorsque IDENTITY_INSERT est désactivé?

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

J'ai exécuté cette requête:

SET IDENTITY_INSERT Database. dbo. Baskets ON

Ensuite, j'ai reçu le message dans la console que la commande (s) s'est terminée avec succès. Cependant, lorsque je lance l'application, il me donne toujours l'erreur ci-dessous:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
332
demandé sur SteveC 2011-08-15 13:37:29

7 réponses

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 indique exactement ce qui ne va pas...

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

573
répondu gbn 2017-07-04 16:06:16

J'ai eu un problème où il ne me permettait pas de l'insérer même après avoir activé IDENTITY_INSERT.

Le problème était que je n'ai pas spécifié les noms de colonnes et pour une raison quelconque, il ne l'a pas aimé.

INSERT INTO tbl Values(vals)

Donc, fondamentalement, faites L'insertion complète dans les valeurs tbl(cols) (vals)

46
répondu Ismael 2013-02-08 14:56:38

Importer: Vous devez écrire des colonnes dans INSERT Instruction

INSERT INTO TABLE
SELECT * FROM    

N'est pas correct.

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

Est correct

28
répondu R.Alonso 2015-04-22 09:58:46

Je sais que c'est un fil plus ancien mais je viens de tomber dessus. Si l'utilisateur essaie d'exécuter des insertions sur la colonne Identity après qu'une autre session ait défini IDENTITY_INSERT, il est tenu d'obtenir l'erreur ci-dessus.

La définition de la valeur D'insertion D'identité et les commandes DML Insert suivantes doivent être exécutées par la même session.

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

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
1
répondu aok 2017-04-22 07:35:08

Cela est probable lorsque vous avez un champ de clé primaire et que vous insérez une valeur en duplication ou que L'indicateur INSERT_IDENTITY est défini sur on

0
répondu seanyp20001 2013-11-20 14:46:50

Il semble nevessary de mettre une base de données SET IDENTITY_INSERT. dbo. Paniers sur; avant chaque lot D'envoi D'insertion SQL. / Vous pouvez envoyer plusieurs INSERT ... VALEUR .. les commandes ont commencé avec un ensemble IDENTITY_INSERT ... SUR; string au début. Il suffit de ne pas mettre de séparateur de lots entre/ Je ne sais pas pourquoi L'ensemble IDENTITY_INSERT ... Sur cesse de fonctionner, après le bloc d'envoi (par exemple.: .ExecuteNonQuery() en c#)... J'ai dû mettre SET IDENTITY_INSERT ... ON; encore au début de la prochaine commande SQL chaîne.

-1
répondu Jettero 2017-03-08 20:08:34

Vous devez ajouter la commande 'go' après avoir défini l'insertion d'identité. Exemple:

SET IDENTITY_INSERT sometableWithIdentity ON
go

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

SET IDENTITY_INSERT sometableWithIdentity OFF
go
-6
répondu Bruce 2015-04-03 06:48:36