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.

1voto

Jettero Points 103

Il semble nécessaire de mettre un SET IDENTITY_INSERT Database.dbo.Baskets ON; avant chaque SQL INSERT envoi d'un lot.

Vous pouvez envoyer plusieurs INSERT ... VALUES ... Les commandes commençant par un SET IDENTITY_INSERT ... ON; au début. Ne mettez pas de séparateur de lot entre les deux.

Je ne sais pas pourquoi le SET IDENTITY_INSERT ... ON cesse de fonctionner après le bloc d'envoi (par ex. : .ExecuteNonQuery() en C#). J'ai dû mettre SET IDENTITY_INSERT ... ON; à nouveau au début de la prochaine chaîne de commande SQL.

0voto

seanyp20001 Points 1

Cela peut se produire lorsque vous avez un champ PRIMARY KEY et que vous insérez une valeur qui se duplique ou que l'indicateur INSERT_IDENTITY est activé.

0voto

Robert Brooker Points 371

Une autre option consiste à créer la colonne Id (clé primaire) sans qu'il s'agisse d'une colonne d'identité, lorsque vous disposez de tables telles que "type" ou "statut", par exemple OrderStatus, où vous souhaitez toujours contrôler la valeur Id.

-2voto

Bruce Points 69

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

SET IDENTITY_INSERT sometableWithIdentity ON
go

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

SET IDENTITY_INSERT sometableWithIdentity OFF
go

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