私はMERGEステートメントを使用してデータベースにレコードを挿入/更新しています。SQL Server MERGE複数の句のバリエーション
私のソーステーブルには、レコードが挿入または更新される必要があるかどうかを識別するために使用される3つの列が含まれています。私の問題はON句で発生します。ターゲットテーブルとソーステーブルは3つのカラムを使用して結合されますが、どのように結合できるかについてはさまざまなバリエーションがあります。 (下の例を参照)
これを達成するためにAND/OR演算子を使用できますが、これは面倒でメンテナンスが難しいことがわかります。もっと効率的な方法があるのだろうかと思っていましたか?
私のコードの例は以下の通りです:事前に
MERGE Target_Table as t
USING (select @param1, @param2, @param3)
AS s (col1, col2, col3)
ON (t.col1 = s.col1
AND t.col2 = s.col2
AND t.col3 = s.col3)
OR (t.col1 = s.col2
AND t.col2 = s.col1
AND t.col3 = s.col3)
WHEN
MATCHED
THEN […update…]
WHEN
NOT
MATCHED
THEN […insert…]
ありがとう!
あなたが私のためにリストアップした内容に基づいて伝えるのは難しいです。どの列も他の表の他の列と一致することはできますか?読みやすさはパフォーマンスIMHOほど重要です。そして、複数のAND/OR演算子を使用しているので、SQL Serverの優先順位を覚えておいてください。 https://msdn.microsoft.com/en-us/library/ms190276.aspx – scsimon
こんにちは、お返事ありがとうございます。はい。ソーステーブルで使用している3つの変数は、ターゲットテーブルの3つの列のいずれかと任意の順序で一致します。さらに私は例を3つの変数に限定しましたが、最大6つまであります。私は、データを評価し、その変数が列の中で見つかったかどうかを確認するより良い方法があるかどうかを確認したいと思います。 – ccalgie
すべてのパラメータが一意ですか、たとえば、param1とparam2の両方を「1」にすることはできますか? –