如何在不同的服务器上更新一个SQL表格来自另一个表格?

3
我已经运行了以下命令,以包含另一个服务器实例。
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”。

有人能看出我错了什么吗?


你是否已经设置了联接服务器? - Dan Bracuk
对不起,之前的例子有误,[allrows] 是一个列名。我本来想说的是 [allColumns] - Charles Clayton
你能测试一下链接服务器吗?:SELECT * FROM [Server].ServerDB.dbo.tableName。这会返回行吗? - Trinculo
如果您将“FROM”更改为本地数据库并在服务器上进行“INNER JOIN”,会发生什么? - Trinculo
还有一个建议:尝试完全删除别名,直接输入完整的名称。(删除serverDB和localDB),然后在INNER JOIN中使用完整的[Server].ServerDB.dbo.tableName.id = [LocalDB].dbo.tableName.id - Trinculo
显示剩余4条评论
2个回答

3
更新时需要使用此语法进行连接更新:
UPDATE s
SET s.[columnName] = l.[columnName]
FROM 
    [Server].[ServerDB].[dbo].[tableName] s
INNER JOIN
     [LocalDB].[dbo].[tableName] l
ON 
     l.id = s.id 

1
好的,谢谢!我对SQL还很陌生,这段代码看起来很奇怪,因为在FROMINNER JOIN之前使用了变量名sl,而没有定义它们。 - Charles Clayton
是的,使用连接更新的语法是问题所在。在SQL Server中有点奇怪。s和l被称为别名,您使用了serverDB和localDB,我使用了s和l - 但您可以使用任何别名。 - Donal

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

没错,看起来它做到了! - Charles Clayton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接