我有一个程序可以在远程表中插入一两次。要完成第二次插入,我需要知道第一次插入的最近插入的Id。为了完成这项工作,我的 insert 子句使 OUTPUT 子句更加方便,它让我知道第一个插入的Id。
如果调用数据库(包含进行插入的过程)和接收数据库驻留在同一个 SQL Server 上(我的开发环境就是这种情况),则此方法可以正常工作。但是,在生产环境中,调用数据库和接收数据库位于不同的 SQL Server 上,这会输出以下错误消息:
消息 405,级别 16,状态 1,过程ProcedureName,行 LineNumber。远程表不能用作包含 OUTPUT 子句或嵌套 DML 语句的语句中的 DML 目标。
编辑(临时表中的 OUTPUT 子句):
declare @message table(MeddelandeKöId bigint primary key, MessageId bigint)
...
output
cast(substring(inserted.ApplicationCustomPublicData, 4, 16) as bigint) MessageQueueId,
inserted.Id MessageId
into @message
解决当前错误的最佳方法是什么?我应该做一个简单的选择,忽略输出语句,以获得最近插入的行,还是有另一个更好的解决方案来解决这个特定问题?
谢谢你的时间!