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 に答える