540 votes

Comment activer et désactiver IDENTITY_INSERT avec SQL Server 2008 ?

Pourquoi est-ce que j'obtiens 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 exécuté cette requête :

SET IDENTITY_INSERT Database. dbo. Baskets ON

Ensuite, j'ai reçu un message dans la console indiquant que la ou les commandes s'étaient déroulées avec succès. Cependant, lorsque j'exécute l'application, je reçois toujours l'erreur ci-dessous :

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

0 votes

Veuillez développer cette question afin que nous puissions comprendre ce que vous essayez de faire. Quelle déclaration exécutez-vous lorsque vous rencontrez cette erreur, et quel est le texte réel du message d'erreur ?

0 votes

Bien que vous ayez posé une autre question, vous devriez accepter une réponse ici : nous avons répondu à la question suivante ce que vous avez demandé .

11 votes

J'ai l'horreur de l'idée que quelqu'un essaie d'envoyer des valeurs d'identité à partir d'une application. Ce n'est pas quelque chose que vous devriez faire, sauf pour les rares migrations de données. Si vous le faites assez régulièrement pour l'exécuter depuis une application, vous devez probablement revoir la conception de vos tables.

889voto

gbn Points 197263

Via SQL, conformément à MSDN

SET IDENTITY_INSERT sometableWithIdentity ON

INSERT INTO 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 d'identité dans la table 'sometableWithIdentity' lorsque IDENTITY_INSERT est réglé sur OFF.

0 votes

@Beginner : vous l'êtes pourtant, d'où l'erreur. Comment pouvons-nous savoir que vous Ne le fais pas. veulent insérer des valeurs ? Nous avons seulement un message d'erreur

4 votes

L'erreur provient de mon application lorsque je fais DB.SaveChanges() ;

0 votes

Dois-je exécuter cette opération dans l'application à chaque fois ?

69voto

Ismael Points 91

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

Le problème est que je n'ai pas spécifié les noms des colonnes et pour une raison quelconque, le système n'a pas apprécié.

INSERT INTO tbl Values(vals)

Donc, en gros, faites le INSERT INTO tbl(cols) Values(vals) complet.

4 votes

C'est exactement ce qu'il voulait de moi, spécifier la liste des colonnes (les deux colonnes de la table, blah)

40voto

R.Alonso Points 546

Importation : Vous devez écrire les colonnes en INSERT déclaration

INSERT INTO TABLE
SELECT * FROM    

Ce n'est pas correct.

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

C'est correct

8voto

aok Points 11

Je sais qu'il s'agit d'un ancien fil de discussion mais je viens de tomber sur ce sujet. Si l'utilisateur essaie d'exécuter des insertions sur la colonne Identity après qu'une autre session ait défini IDENTITY_INSERT ON, il obtiendra certainement l'erreur ci-dessus.

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

Ici, @Beginner configurait Identity Insert ON séparément, puis exécutait les insertions à partir de son application. C'est pourquoi il a obtenu l'erreur suivante :

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

5voto

vikramreddy Points 11

Solution :

1) Définissez IDENTITY_INSERT sur ON.

2) Insérez les données des clients dans la table Customer.

3) Réglez IDENTITY_INSERT sur OFF.

Lire l'article complet aquí .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X