Impossible d'insérer une valeur explicite pour l'identité de la colonne dans le tableau lorsque IDENTITY_INSERT est réglé sur OFF
J'essaie d'insérer des enregistrements dans une table qui a une colonne d'identité. Pour diverses raisons, cela ne devrait pas être un droit d'insérer, mais il devrait avoir le même ID de la table étrangère.
Donc, je lance:
EXECUTE ('SET IDENTITY_INSERT RemoteDB.dbo.FrameContent ON')
INSERT INTO [RemoteDB].[dbo].[FrameContent] ([ID],[FrameID],[PacketType])
SELECT [ID],[FrameID],[PacketType]
FROM FrameContent
WHERE [ID] NOT IN (SELECT [ID] FROM [RemoteDB].[dbo].[FrameContent])
Et j'obtiens l'erreur:
Cannot insert explicit value for identity column in table 'FrameContent' when IDENTITY_INSERT is set to OFF.
Des idées? Il se plaint de ce que IDENTITY_INSERT ne devrait pas être, mais je suis paramètre SUR on.
Pourquoi utilisez-vous
Désolé - copier et coller question. Je suis en train de compiler une chaîne de caractères avec des variables. Doit être DÉFINI pour cet exemple.
execute
pour exécuter le SET
commande?Désolé - copier et coller question. Je suis en train de compiler une chaîne de caractères avec des variables. Doit être DÉFINI pour cet exemple.
OriginalL'auteur Cameron Castillo | 2013-06-20
Vous devez vous connecter pour publier un commentaire.
Essayer de mettre
dentity_insert
à l'extérieurexecute
:Si vous le placez à l'intérieur de
execute
, il sera le seul applicable à d'autres états à l'intérieur de laexecute
.Ici vous allez.
code
declare @tableaux Tableau(id smallint Clé Primaire IDENTITY(1,1), le nom de type nvarchar(100)) insérer @tables SELECT TABLE_NAME DE INFORMATION_SCHEMA.Des TABLES OÙ TABLE_TYPE = 'la BASE de la TABLE' declare @i int declare @numrows int declare @tableName de type nvarchar(100) set @i = 1 set @numrows = (SELECT COUNT(*) from @tables) SI @numrows > 0 WHILE (@i <= (SELECT MAX(id) from @tables)) BEGIN SET @tableName = (SELECT nom from @tables where id = @i) exec [dbo].[whateverproc] @nomtable SET @i = @i + 1 FINOriginalL'auteur Andomar