[SQL Server] 同じ行に対して UPDATE または DELETE が複数回試行されました。
MERGE ステートメントで、同じ行に対して UPDATE または DELETE が複数回試行されました。これは、対象の行が基になる複数の行と一致する場合に発生します。MERGE ステートメントでは対象のテーブルの同じ行で複数回 UPDATE/DELETE を実行することはできません。対象の行と一致する基になる行が 1 つだけになるように ON 句を修正するか、GROUP BY 句を使用して基になる行をグループ化してください。
ややわかりづらいエラーメッセージ。
更新元レコードが複数あり、抽出条件を追加するか、グループ化することで一対になるようにしろということらしい。
このようなテーブルがあった際に、以下の MERGE 文を発行するとエラーとなる。
結果は以下の通りになる。
ややわかりづらいエラーメッセージ。
更新元レコードが複数あり、抽出条件を追加するか、グループ化することで一対になるようにしろということらしい。
TEST1
TEST2
このようなテーブルがあった際に、以下の MERGE 文を発行するとエラーとなる。
MERGE TEST1 USING TEST2 ON (TEST1.KEY1 = TEST2.KEY1) WHEN MATCHED THEN UPDATE SET TEST1.SCORE = TEST2.SCORE WHEN NOT MATCHED THEN INSERT (KEY1, NAME, SCORE) VALUES (KEY1, NAME, SCORE);TEST2 テーブルのスコアを合算してマージする場合、以下のようにグループ化する。
MERGE TEST1 USING ( SELECT KEY1 ,NAME ,SUM(SCORE) AS SCORE FROM TEST2 GROUP BY KEY1 ,NAME ) AS TEST2 ON (TEST1.KEY1 = TEST2.KEY1) WHEN MATCHED THEN UPDATE SET TEST1.SCORE = TEST2.SCORE WHEN NOT MATCHED THEN INSERT (KEY1, NAME, SCORE) VALUES (KEY1, NAME, SCORE);
結果は以下の通りになる。
TEST1