0

我正在尝试更新一个表,以便所有值都与不同数据库上的另一个表相同。我可以使用插入命令而不是更新命令来做到这一点。

这有效:

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]

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

消息 4104,第 16 层,状态 1,第 1 行

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

有什么建议么?

4

2 回答 2

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

PS 根据您使用的数据库,您可能需要查看该MERGE语句。

于 2012-07-27T18:20:50.130 回答
0

您缺少 FROM 子句(因为您在更新子句中使用多个表)检查此:http ://scottonwriting.net/sowblog/archive/2010/07/13/howto-update-records-in-a-带有数据的数据库表,来自另一个表-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]
于 2012-07-27T18:21:41.977 回答