在链接的SQL Server中插入Id

时间:2013-09-24 12:08:32

标签: sql sql-server linked-server

我已将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?

1 个答案:

答案 0 :(得分:0)

如果您的链接服务器Server2LinkedServer1中可见,则可以执行以下操作:

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