Impossible d'insérer une valeur explicite parce que IDENTITY_INSERT est ÉTEINT, mais ne peut pas SET IDENTITY_INSERT SUR car il est déjà SUR

J'ai une table dans la base de données Foo nommé Bar, qui a une colonne nommée ID, qui est la clé primaire, et cette base de données est vivant sur le développement de SQL Server.

Je suis en train de copier des données à partir de notre serveur de production dans le serveur de développement pour que je puisse jouer avec ces données, afin d'exécuter les opérations suivantes:

set IDENTITY_INSERT Foo.dbo.Bar ON
insert into Foo.dbo.Bar
(
   ID
   ,Something
   ,Else
   ,Is
   ,Going
   ,Horribly
   ,Wrong
   ,With
   ,SQL
)
select 
  ID
  ,Something
  ,Else
  ,Is
  ,Going
  ,Horribly
  ,Wrong
  ,With
  ,SQL
from Production.Foo.dbo.Bar

set IDENTITY_INSERT Foo.dbo.Bar OFF

Et je reçois le message d'erreur

Msg 8107, Niveau 16, État 1, Ligne 1

IDENTITY_INSERT est déjà SUR la table 'Foo.dbo.Bar'. Ne peut pas effectuer l'opération de l'ENSEMBLE de la table 'Foo.dbo.Bar'.

Hmm..ok, donc IDENTITY_INSERT est activé sur la table. J'ai donc enlevé le SET IDENTITY_INSERT Foo.dbo.Bar ON du haut de ma requête, puis de l'exécuter, et j'obtiens cette erreur:

Msg 544, Niveau 16, État 1, Ligne 1

Impossible d'insérer une valeur explicite pour l'identité de la colonne dans la table " Bar " quand IDENTITY_INSERT est réglé sur OFF.

Je peut exécuter SET IDENTITY_INSERT Foo.dbo.Bar OFF tout au long de la journée, mais si j'essaie de tourner ON, SQL Server 2012, dit que IDENTITY_INSERT est déjà activée.

Est-il possible qu'il a été allumé à partir d'une autre session?
Je ne peux pas recréer cette erreur. Si IDENTITY_INSERT est sur une table, je peux constamment régler sur avec pas d'erreur, même si il est éteint, je peux le mettre sur off, le seul moment où je ne peux pas le régler SUR on est, si c'est il y a un autre tableau de la même session. Comme vous pouvez le voir dans ce violon les 3 premiers lots, beau travail d'allumer ou d'éteindre à nouveau plusieurs fois, c'est seulement le 4 lot qui échoue.
Je ne peux pas recréer cette erreur. 1) c'est un obscur SQL Server bug (peu probable), ou 2) que c'est lié à certaines transactions distribuées contexte qui je ne peux pas tester pour l'instant (pas tout à fait comme peu probable), ou 3) vous avez mal lu les noms réels/situation en quelque sorte.
J'ai réussi à résoudre mon problème par l'exécution de ma requête dans une nouvelle fenêtre de requête. Merci @AaronBertrand pour me mettre sur la bonne voie.
Double-vérifier le nom de la table dans l'erreur correspond au nom de la table dans le message. Me scotche à chaque fois qu'il peut être fait référence à une autre table car une seule table peut avoir identity_insert à une heure.

OriginalL'auteur CurtisHx | 2013-06-27