使用Merge有效地更新整行

时间:2013-02-20 17:47:01

标签: sql-server

我正在设计一个按计划运行的存储过程。它的目的是根据OpenQuery的结果更新表。 OpenQuery将返回一些全新的记录和一些更新的记录。我目前以这种方式写这篇文章。

DELETE A
FROM TableA A
JOIN @OpenQueryResult B
  ON A.Key1 = B.Key1 AND A.Key2 = B.Key2

INSERT INTO TableA
(.
.
.)
SELECT 
.
.
.
FROM @OpenQueryResult

注意:TableA除了几个计算字段外,还包含@OpenQueryResult中的所有列。

我想找到一个更好的方法来做到这一点。通过一些研究,Merge似乎是一个很好的选择,因为它减少了开销,从而减少了执行时间。我觉得事情看起来有点像这样:

MERGE TableA AS target
USING @OpenQueryResult AS source
ON (target.Key1 = source.Key1 AND target.Key2 = source.Key2)
WHEN MATCHED THEN
  UPDATE ...
WHEN NOT MATCHED THEN
  INSERT ...
  VALUES ...

我在网上看到的所有示例都明确列出了应该更新的列。是否有说“复制所有匹配的列名”的快捷方式? TableA在列数方面相当庞大。

1 个答案:

答案 0 :(得分:2)

  

是否有快捷方式说"复制所有匹配的列名"?

不。要列出所有。您通常可以从某处复制/粘贴列列表。例如,right click -> script -> script as select为您提供逗号分隔的列列表。