0

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

4

1 回答 1

1

如果您的链接服务器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
于 2013-09-24T12:26:00.933 回答