[SQL Server] 同じ行に対して UPDATE または DELETE が複数回試行されました。

MERGE ステートメントで、同じ行に対して UPDATE または DELETE が複数回試行されました。これは、対象の行が基になる複数の行と一致する場合に発生します。MERGE ステートメントでは対象のテーブルの同じ行で複数回 UPDATE/DELETE を実行することはできません。対象の行と一致する基になる行が 1 つだけになるように ON 句を修正するか、GROUP BY 句を使用して基になる行をグループ化してください。

ややわかりづらいエラーメッセージ。
更新元レコードが複数あり、抽出条件を追加するか、グループ化することで一対になるようにしろということらしい。

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

このブログの人気の投稿

コピーした行の挿入が表示されない時はフィルタされていないかチェック

Excel で一部の図形だけ固定する