使来自不同数据库的表彼此匹配

时间:2012-07-27 18:18:34

标签: sql database sql-update insert-update sql-insert

我正在尝试更新表,以便所有值与另一个数据库上的另一个表相同。我可以使用insert命令但不能使用更新命令。

这有效:

INSERT [test1].[dbo].[table1]
    SELECT * FROM [source].[dbo].[table1]

这不是:

UPDATE [test2].[dbo].[table1] 
SET [source].[dbo].[table1] = [test2].[dbo].[table1]

也不是:

UPDATE [test2].[dbo].[table1]
SET 
     [test2].[dbo].[table1].[PKcolumn] = [source].[dbo].[table1].[PKcolumn]
    ,[test2].[dbo].[table1].[column2] = [source].[dbo].[table1].[column2] 
    ,[test2].[dbo].[table1].[column3] = [source].[dbo].[table1].[column3] 

WHERE
    [source].[dbo].[table1].[PKcolumn] = [test2].[dbo].[table1].[PKcolumn]

尽管无数次检查错误,结果始终是此错误消息的一些变体:

Msg 4104,Level 16,State 1,Line 1

无法绑定多部分标识符“source.dbo.table1.PKColumn”。

任何建议?

2 个答案:

答案 0 :(得分:0)

由于update只能影响一个表,因此您无需指定它:

UPDATE dest
SET    column2 = src.column2
FROM   source.dbo.table1 as src
JOIN   test2.dbo.table1 as dest
on     dest.PKcolumn = src.PKcolumn

P.S。根据您使用的数据库,您可能需要查看MERGE声明。

答案 1 :(得分:0)

您缺少FROM子句(因为您在update子句中使用了多个表) 检查一下:http://scottonwriting.net/sowblog/archive/2010/07/13/howto-update-records-in-a-database-table-with-data-from-another-table-ms-sql-server.aspx

试试这个:

UPDATE [test2].[dbo].[table1]
SET 
     [test2].[dbo].[table1].[PKcolumn] = [source].[dbo].[table1].[PKcolumn]
    ,[test2].[dbo].[table1].[column2] = [source].[dbo].[table1].[column2] 
    ,[test2].[dbo].[table1].[column3] = [source].[dbo].[table1].[column3] 
FROM [source].[dbo].[table1] JOIN [test2].[dbo].[table1]
ON
    [source].[dbo].[table1].[PKcolumn] = [test2].[dbo].[table1].[PKcolumn]