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