我在2个数据库中有相同的表
-----------------------------------
| table |
-----------------------------------
| ID | col1 | col2 | ... | col(n) |
我需要merge语句来更新匹配ID的行,如下所示:
MERGE [DB1]..[table]
USING [DB2]..[table] ON [DB1]..[table].[ID] = [DB2]..[table].[ID]
WHEN MATCHED THEN
UPDATE SET [DB1]..[table].[*] = [DB1]..[table].[*]
问题是我有超过30列,因此很难逐列设置值。
答案 0 :(得分:7)
无法使用通配符指定目标更新列和映射(即使所有列都相同)。您可以通过单击对象资源管理器中的Columns
节点,然后将其(以及列名称)拖到查询窗口中来获取所有输入的开头:
所以现在你没有那么多的打字要做,只是一堆操纵,复制和粘贴。
我不会因此而使用MERGE
,原因有多种(包括当只涉及UPDATE
时语法相当麻烦的事实),并且正如我在上面的评论中所提到的那样。 See this post for details
UPDATE trg
SET col1 = src.col1,
col2 = src.col2,
...
FROM DB1.dbo.table AS trg
INNER JOIN DB2.dbo.table AS src
ON trg.ID = src.ID;
答案 1 :(得分:0)
我认为@AaronBertrand适合这个问题。 MERGE声明不是必需的。您可以编写简单的更新语句(必要时使用连接)。
1)简单更新
UPDATE TableName
SET col1 ='what you want to update'
2)两次或多次更新
UPDATE t2
SET t2.col2 =t.col2,
t2.col3 =t1.col3,
t2.col4 =t.col5
FROM Table t
INNER JOIN Table1 t1 on t1.col1=t.col1
INNER JOIN Table2 t2 on t2.col1=t1.col1