2013-02-20 61 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爲您提供逗號分隔的列列表。