合并以更新所有目标表列

时间:2014-02-02 13:09:54

标签: sql sql-server

我在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列,因此很难逐列设置值。

2 个答案:

答案 0 :(得分:7)

无法使用通配符指定目标更新列和映射(即使所有列都相同)。您可以通过单击对象资源管理器中的Columns节点,然后将其(以及列名称)拖到查询窗口中来获取所有输入的开头:

  

enter image description here

     

enter image description here

所以现在你没有那么多的打字要做,只是一堆操纵,复制和粘贴。

我不会因此而使用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