我已将2个Microsoft SQL服务器链接在一起,我们称之为LinkedServer1和Server2。我正在尝试使用带有OUTPUT的INSERT脚本插入第二个数据以获取自动递增的ID:
DECLARE @newIdHolderTable TABLE (Id INT)
INSERT INTO [LinkedServer1].[Db1].[dbo].[Table1]
(Field1
,Field2)
OUTPUT inserted.ID INTO @newIdHolderTable
SELECT
Field1
,Field2
FROM [Server2].[Db1].[dbo].[Table1]
WHERE [Id] = @Id
不幸的是,这会失败并显示错误消息:
远程表不能用作包含OUTPUT子句或嵌套DML语句的语句中的DML目标。
如何将值插入到链接的SQL Server表中并获取新的Id?
答案 0 :(得分:0)
如果您的链接服务器Server2
在LinkedServer1
中可见,则可以执行以下操作:
declare @newIdHolderTable table (Id INT);
declare @stmt nvarchar(max)
select @stmt = '
INSERT [Db1].[dbo].[Table1] (Field1,Field2) VALUES (values);
OUTPUT inserted.ID
SELECT
Field1
,Field2
FROM [Server2].[Db1].[dbo].[Table1]
WHERE [Id] = @Id
'
insert into @newIdHolderTable
exec LinkedServer1.master..sp_executesql
@stmt = @stmt,
@params = N'@Id int',
@Id = @Id