SQL ServerのMERGE
はどのように機能しますか?SQL MERGE文のINSERT、UPDATEおよびDELETE操作の順序を制御するものは何ですか?
実行される複数の操作(INSERT
、UPDATE
、DELETE
)がある場合、何がこれらの操作が実行される順序を制御しますか?
SQL ServerのMERGE
はどのように機能しますか?SQL MERGE文のINSERT、UPDATEおよびDELETE操作の順序を制御するものは何ですか?
実行される複数の操作(INSERT
、UPDATE
、DELETE
)がある場合、何がこれらの操作が実行される順序を制御しますか?
:すべての挿入、更新のために
、またはMERGE 文で指定されたアクションを削除し、SQL Serverは、AFTERトリガーに対応するいずれかがターゲット表に を定義して発射するが、そのアクションに保証するものではありません。 トリガを最初または最後に発射します。
ドキュメントを正しく理解していれば、SQL Serverはいかなる保証もいたしません。それはあなたの照会を適切と見なして実行します。
'MERGE'自体が' INSERT'、 'UPDATE'および' DELETE'sをどのように扱うのではなく、 'MERGE'を実行するターゲット表のトリガーをSQLがどのように処理するかをこの引用符では示していませんか? – 3N1GM4
はい、それは良い点です。私は、注文が重要である理由を考えることができませんでした。ほとんどの場合、1つの操作と見なすことができます。しかし、あなたのデータベースにスパゲッティトリガー*の混乱が含まれていれば*実行の順序は重要かもしれません。いずれにしても、元の質問に対するあなたのコメントはより良い回答であると思います。 –
documentationをMERGE
として、私のコメントごとにチェックしてください。
MERGE
ステートメント内では、ソース表とターゲット表の間のレコードの一致方法と、一致がある(または一致しない)場合のアクションを指定します。従って、INSERT
がどのレコードであるかが、UPDATE
であり、これはDELETE
dであることを決定する。
上記のドキュメントページからの例を見てみましょう:ここ
MERGE Production.UnitMeasure AS target
USING (SELECT @UnitMeasureCode, @Name) AS source (UnitMeasureCode, Name)
ON (target.UnitMeasureCode = source.UnitMeasureCode)
WHEN MATCHED THEN
UPDATE SET Name = source.Name
WHEN NOT MATCHED THEN
INSERT (UnitMeasureCode, Name)
VALUES (source.UnitMeasureCode, source.Name)
OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable;
を、彼らはtarget.UnitMeasureCode = source.UnitMeasureCode
にレコードをマッチングされ、マッチがある場合、彼らはソースからName
値を持つ対象のレコードを更新します。一致するものがなければ、ソースレコードの値を使用して新しいレコードをターゲットテーブルに挿入します。
「MERGE」の[documentation](https://msdn.microsoft.com/en-us/library/bb510625.aspx)を読んだことがありますか?ステートメントの構文内で、一致条件に基づいてどのような条件でどのようなアクションを取るべきかを指定します。あなたが何をしようとしているのかを読んで、何かしようとしたら、特定の問題や疑問がある場合に戻ってください。 – 3N1GM4