首页 > 解决方案 > 执行的查询与查询的执行方式不同(使用身份插入)

问题描述

我正在尝试遍历表并将记录从一个数据库插入另一个数据库,所以我想保持动态。如果我运行以下命令,我会收到错误

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)

当 IDENTITY_INSERT 设置为 OFF 时,无法在表“TABLE”中插入标识列的显式值。

如果我自己运行命令(而不是作为可执行字符串)一切正常。我的猜测是它在执行之前构建了@command 和@command2,当它发现问题时它会在尝试执行之前抛出一个错误。

请问有人有什么想法吗?

标签: tsql

解决方案


SET IDENTITY_INSERT当该范围退出时,动态 SQL 中设置的选项将被重置。

您需要在同一动态 SQL 字符串中设置该选项,这取决于它是否打开。这可以包含多个语句(理想情况下以分号结尾)


推荐阅读