MS SQL Server не позволяет мне установить IDENTITY_INSERT на ON
У меня есть таблица в базе данных (MS SQL Server 2008), которая заполнена данными. Я хочу переместить некоторые из этих данных (среди которых есть столбец с ограничением IDENTITY) в таблицу с тем же именем в другой базе данных для целей резервного копирования. Поскольку у меня есть таблица со столбцом IDENTITY, которую я хочу переместить, мне нужно установить для IDENTITY_INSERT значение ON. Я не хочу жестко кодировать это, так как в будущем у меня могут появиться другие таблицы и столбцы с этой проблемой.
Я часами возился с этим фрагментом кода и не могу заставить его работать:
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'
Я получаю следующую ошибку при запуске этого сценария: Явное значение для столбца идентификаторов в таблице может быть указано только в том случае, если используется список столбцов, а IDENTITY_INSERT включен ON SQL Server.
Кажется, что MS SQL игнорирует 'ON' в моей строке @IDENTITY_INSERTTableCommand, но жалуется на ошибки синтаксиса, когда я ввожу в строку бессмысленные слова.
Может кто-нибудь сказать мне, что я делаю не так? Заранее спасибо.
1 ответ
Однажды execute
он завершил IDENTITY_INSERT
вернусь к OFF
, Это будет ON
только внутри execute
Переместить Insert
заявление в строку и выполнить его
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)