tsql - 执行的查询与查询的执行方式不同(使用身份插入)
问题描述
我正在尝试遍历表并将记录从一个数据库插入另一个数据库,所以我想保持动态。如果我运行以下命令,我会收到错误
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,当它发现问题时它会在尝试执行之前抛出一个错误。
请问有人有什么想法吗?
解决方案
SET IDENTITY_INSERT
当该范围退出时,动态 SQL 中设置的选项将被重置。
您需要在同一动态 SQL 字符串中设置该选项,这取决于它是否打开。这可以包含多个语句(理想情况下以分号结尾)
推荐阅读
- r - 如何在使用```complete```时保持```cut ```顺序中的变量顺序
- docusaurus - 生成静态 Docusaurus 站点以供在没有网络服务器的情况下使用
- amazon-web-services - Lambda 无法在 VPC 内为 CodePipeline 执行 putjobSuccess
- elasticsearch - 过滤 Logstash Sonicwall
- postgresql - 是否有任何可能或选项来获取导致 postgres 从服务器内存不足的查询
- docker - 启动 docker 容器的延迟 - 超过 10 个绑定挂载
- vector - 向量和整数等
- c# - 如何从子节点获取 C# 中的所有文本,但避免来自具有特定属性(例如已删除)的子节点的文本
- python - 如何从图像中的边缘到连接的组件
- python - 尝试使用 Dask 读取 Redshift 外部表时出现“sqlalchemy.exc.NoSuchTableError”