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.
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.
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)
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
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.
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
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.
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