【问题标题】:How to update SQL table from other table when they are on different servers当它们在不同的服务器上时如何从其他表更新 SQL 表
【发布时间】:2015-09-03 00:55:55
【问题描述】:

我已经运行了以下命令来包含另一个服务器实例。

EXEC sp_addlinkedserver @server='Server'

现在我正在尝试使用以下方法同步这些数据库:

UPDATE
    [Server].[ServerDB].[dbo].[tableName] 
SET 
    [Server].[ServerDB].[dbo].[tableName].[columnName] = [LocalDB].[dbo].[tableName].[columnName]
FROM 
    [Server].[ServerDB].[dbo].[tableName], [LocalDB].[dbo].[tableName]
WHERE 
    [Server].[ServerDB].[dbo].[tableName].id = [LocalDB].[dbo].[tableName].id  

这给了我以下错误:

FROM 子句中的对象“LocalDB.dbo.tableName”和“Server.ServerDB.dbo.tableName”具有相同的公开名称。使用相关名称来区分它们。

所以在摆弄它之后,我尝试了各种不同的版本:

UPDATE
    [Server].[ServerDB].[dbo].[tableName] 
SET 
    [Server].[ServerDB].[dbo].[tableName].[columnName] = [LocalDB].[dbo].[tableName].[columnName]
FROM 
    [Server].[ServerDB].[dbo].[tableName] serverDB
INNER JOIN
     [LocalDB].[dbo].[tableName] localDB
ON 
     serverDB.id = localDB.id 

但他们都给了我某种错误的再现:

无法绑定多部分标识符“Server.ServerDB.dbo.tableName.allrows”。

有人能发现我错过了什么吗?

【问题讨论】:

  • 您是否设置了链接服务器?
  • 我运行与[Server].[ServerDB].[dbo].[tableName] 交互的其他命令,所以我非常有信心它已附加。只是这个更新给我带来了问题。
  • 它似乎试图将[allrows] 解释为列名。
  • 对不起,这是一个不好的例子,[allrows] 是一个列名。我的意思是说[allColumns]
  • 你可以测试链接服务器吗?:SELECT * FROM [Server].ServerDB.dbo.tableName。这会返回行吗?

标签: sql sql-server database sql-update sql-merge


【解决方案1】:
UPDATE
    serverDB
SET 
    [columnName] = localdb.[columnName]
FROM 
    [Server].[ServerDB].[dbo].[tableName] serverDB
INNER JOIN
     [LocalDB].[dbo].[tableName] localDB
ON 
     serverDB.id = localDB.id

【讨论】:

  • 是的,看起来它做到了!
【解决方案2】:

使用连接更新时需要使用此语法:

UPDATE s
SET s.[columnName] = l.[columnName]
FROM 
    [Server].[ServerDB].[dbo].[tableName] s
INNER JOIN
     [LocalDB].[dbo].[tableName] l
ON 
     l.id = s.id 

【讨论】:

  • 好的,谢谢!我是 SQL 新手,这对我来说看起来很奇怪,因为您似乎在 SET 中使用了变量名 sl,然后在 FROMINNER JOIN 中定义它们。
  • 是的,使用 join 进行更新的语法是问题所在。它在 SQL Server 中有点奇怪。 s 和 l 被称为别名,你使用过 serverDB 和 localDB,我使用过 s 和 l - 但你可以使用任何你想要的别名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 2022-01-18
  • 2017-03-14
  • 1970-01-01
  • 2020-08-16
  • 2016-11-23
相关资源
最近更新 更多