2013-02-20 60 views
0

我正在设计一个按计划运行的存储过程。它的目的是根据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 ... 

所有我在网上看到明确列出应更新的列的例子。有没有捷径说“复制所有匹配的列名”?表格A在列数上相当庞大。

回答

2

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

没有。把它们全部列出来。您通常可以从某处复制/粘贴列列表。例如,right click -> script -> script as select为您提供逗号分隔的列列表。