2017-06-21 3 views
0

J'ai une table dans une base de données (MS SQL Server 2008) qui est remplie de données. Je veux déplacer certaines de ces données (parmi lesquelles une colonne avec une contrainte IDENTITY) vers une table portant le même nom dans une autre base de données à des fins de sauvegarde. Comme j'ai une table avec une colonne IDENTITY que je veux déplacer, j'ai besoin de définir IDENTITY_INSERT sur ON. Je ne veux pas coder dur ceci, car je pourrais avoir d'autres tables et colonnes dans le futur avec ce problème.MS SQL Server ne me laisse pas définir IDENTITY_INSERT sur ON

Je tripotage avec ce morceau de code pendant des heures et ne peut pas faire fonctionner:

SET IDENTITY_INSERT FDW_test2.dbo.[MIS-ODB_INOUT_LOG] OFF 

declare @IDENTITY_INSERTTableCommand nchar(150) = 'SET IDENTITY_INSERT 
FDW_test2.dbo.[MIS-ODB_INOUT_LOG] ON' 

execute (@IDENTITY_INSERTTableCommand) 

INSERT INTO FDW_test2.dbo.[MIS-ODB_INOUT_LOG] ([INOUT_Link ID], 
[INOUT_DIARY_KEY]) 
    SELECT [INOUT_Link ID], [INOUT_DIARY_KEY] 
    FROM FDW.dbo.[MIS-ODB_INOUT_LOG] 
    WHERE [INOUT_Client ID] = '1-197' 

Je reçois l'erreur suivante lors de l'exécution de ce script: Une valeur explicite pour la colonne d'identité dans le tableau ne peut être spécifié lorsqu'une liste de colonnes est utilisée et IDENTITY_INSERT sur ON SQL Server.

Il semble que MS SQL ignore le 'ON' dans ma chaîne @IDENTITY_INSERTTableCommand, mais il se plaint d'erreurs de synthax quand j'entre gibberish dans la chaîne. Est-ce que quelqu'un peut me dire ce que je fais mal? Merci d'avance.

Répondre

0

Une fois le execute terminé, le IDENTITY_INSERT sera de nouveau à OFF. Il sera ON seulement à l'intérieur du execute

Déplacer l'instruction Insert à la chaîne et l'exécuter

declare @IDENTITY_INSERTTableCommand nvarchar(2000) = 
'SET IDENTITY_INSERT FDW_test2.dbo.[MIS-ODB_INOUT_LOG] ON 

INSERT INTO FDW_test2.dbo.[MIS-ODB_INOUT_LOG] ([INOUT_Link ID], 
[INOUT_DIARY_KEY]) 
    SELECT [INOUT_Link ID], [INOUT_DIARY_KEY] 
    FROM FDW.dbo.[MIS-ODB_INOUT_LOG] 
    WHERE [INOUT_Client ID] = ''1-197'' 
' 

execute (@IDENTITY_INSERTTableCommand) 
+0

Merci beaucoup! Cela a fonctionné. : D Je suis tellement content de ne pas avoir passé mon après-midi pour rien. – Vraagteken