我正在尝试更新表,以便所有值与另一个数据库上的另一个表相同。我可以使用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”。
任何建议?
答案 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]