スケジュールに従って実行されるストアドプロシージャを設計しています。目的は、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は、列数の点でかなり巨大です。