1

我正在设计一个按计划运行的存储过程。它的目的是根据 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 在列数方面相当庞大。

4

1 回答 1

3

有没有捷径可以说“复制所有匹配的列名”?

没有。一定要把它们都列出来。您通常可以从某处复制/粘贴列列表。例如,right click -> script -> script as select给你一个逗号分隔的列列表。

于 2013-02-20T17:59:38.597 回答