SQL Server远程更新替代方案

时间:2016-01-07 22:43:25

标签: sql-server

我想知道除了使用此连接进行远程更新之外是否还有其他选择。我是使用链接服务器的新手,我已经读过连接可能表现不佳(取决于实现)。作为参考,本地表很小,远程表很大,它们都具有相同的模式和表名。

[更新]

  • 添加了表名和模式相同的注释。
  • 添加了执行计划。

这有效:

UPDATE remoteTable
SET remoteTable.[Data] = mylocalTable.[Data]
FROM [RemoteServer].[MyDatabase].[dbo].[MyTable] remoteTable
INNER JOIN [dbo].[MyTable] myLocalTable ON (remoteTable.[Id] = myLocalTable.[Id])

Execution plan

这些无法正常工作。我已尝试过以下查询并遇到这些错误。

UPDATE [RemoteServer].[MyDatabase].[dbo].[MyTable]
SET [Data] = [dbo].[MyTable].[Data]
FROM [dbo].[MyTable]
WHERE [Id] = [dbo].[MyTable].[Id])
  

对象" RemoteServer.MyDatabase.dbo.MyTable"和" dbo.MyTable" FROM子句中具有相同的公开名称。使用相关名来区分它们。

UPDATE [RemoteServer].[MyDatabase].[dbo].[MyTable]
SET [Data] = mylocalTable.[Data]
FROM [dbo].[MyTable] myLocalTable
WHERE [Id] = myLocalTable.[Id])
  

不明确的列名' id'。

UPDATE [RemoteServer].[MyDatabase].[dbo].[MyTable]
SET [Data] = mylocalTable.[Data]
FROM [dbo].[MyTable] myLocalTable
WHERE ([RemoteServer].[MyDatabase].[dbo].[MyTable].[Id] = myLocalTable.[Id])
  

多部分标识符" RemoteServer.MyDatabase.dbo.MyTable.Id"无法受约束。

MERGE [RemoteServer].[MyDatabase].[dbo].[MyTable] remoteTable
USING [dbo].[MyTable] localTable ON (remoteTable.[Id]=localTable.[Id])
WHEN MATCHED THEN
    UPDATE
         SET [Data] = localTable.[Data]
;
  

MERGE语句的目标不能是远程表,远程视图或远程表上的视图。

1 个答案:

答案 0 :(得分:0)

这会运行吗?

UPDATE RemoteServer.MyDatabase.dbo.MyTable
SET Data = (
    SELECT Data
    FROM myLocalTable lt
    WHERE lt.Id = MyTable.Id
)

我不确定两个服务器之间的表名是否相同。确保对查询中的一个进行别名,并在没有四部分名称的情况下引用相关性中的更新表。