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.
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
Vous devez vous connecter pour publier un commentaire.
Drôle - je viens d'avoir exactement le même problème avec 3 des 4 tables dans ma nouvelle marque de ss2012 base de données.
J'ai donc réécrit le script de création de table de support de mon insert avec "définir l'identité" et de "définir l'identité" et ça fonctionne. Il semble que la ss ne veut manipuler un tableau de l'identité, à une époque ie, vous ne pouvez pas définir une nouvelle table d'identité jusqu'à ce que tous les autres ont été désactivés.
quelque chose comme ceci:
OriginalL'auteur jmaschle
J'ai effectivement trouvé une autre solution à ce. C'est en fait différent de Msg 8101, spécifique à la table d'identité n'étant pas réglé SUR on.
Pour résoudre le problème, vous avez besoin de déplacer le schéma et les tables du même nom dans la maître base de données.
J'ai un modèle de script qui crée une base de données et des tables et insère des données dans ces tables, quelque chose comme:
Le problème est que lors de la création de base de données, l'instruction a échoué en raison de la "dispositif d'activation" d'erreur (autorisations dans le dossier où le fichier MDF sera créé), ou en raison de la base de données de taille de fichier. Le script a continué, mais qui ont créé les schémas et les tableaux dans le maître base de données à la place. Après, j'ai réalisé l'erreur, j'ai arrêté le script et a tenté de l'exécuter à nouveau le créer des points fixes.
Puis j'ai eu l'erreur.
Je ne suis pas SQL Server, expert, mais je pense que c'est le schéma dans la base de données tout d'abord, et parce que ce schéma est disponible, et dans la session actuelle de l'IDENTITÉ est déjà allumé, il donne ce message d'erreur.
Après la suppression de schémas et de tableaux incorrectement créée dans la base de données master, mon script s'est exécuté avec succès.
OriginalL'auteur Xenno
J'ai eu exactement la même erreur. J'ai été en utilisant
linq-to-sql
et la table et le fichier dbml a d'abord été généré sans identité, la colonne de la clé primaire.Plus tard, j'ai mis à jour la clé primaire d'une colonne d'Identité, mais ils ont oublié de mettre à jour le fichier dbml.
Le correctif a été mise à jour le fichier dbml c'est assez marrant...
OriginalL'auteur JumpingJezza