Выполненный запрос выполняется иначе, чем запрос (используется вставка идентификатора) - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь l oop просматривать таблицы и вставлять записи из одной базы данных в другую, поэтому я хочу, чтобы все было динамично c. Если я запускаю следующее, я получаю сообщение об ошибке

DECLARE @command NVARCHAR(max) = 'SET IDENTITY_INSERT [NEW].[dbo].[TABLE] ON'

EXEC    (@command)

DECLARE @command2 NVARCHAR(max) = 'Insert Into [NEW].[dbo].[TABLE] ([ID], [Description], [SiteID], [Active]) Select [ID], [Description], [SiteID], [Active] from [OLD].[dbo].[TABLE]'

EXEC    (@command2)

Невозможно вставить явное значение для столбца идентификаторов в таблице 'TABLE', когда для IDENTITY_INSERT установлено значение OFF.

Если Я запускаю команды самостоятельно (не как исполняемые строки), все работает отлично. Я предполагаю, что он собирает @command и @ command2 перед выполнением, а когда находит проблему, выдает ошибку перед попыткой выполнения.

У кого-нибудь есть идеи, пожалуйста?

1 Ответ

1 голос
/ 21 апреля 2020

SET IDENTITY_INSERT параметры, установленные внутри Dynami c SQL, будут сброшены при выходе из этой области.

Вам нужно будет установить параметр внутри той же строки Dynami c SQL, которая является в зависимости от того, Это может содержать несколько операторов (в идеале точка с запятой должна заканчиваться)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...