これは、ターゲット行が複数のソース行と一致する場合に発生します。
MERGEステートメントは、ターゲットテーブルの同じ行を複数回更新/削除することはできません。
エラーはかなり自明だと思います。
ソーステーブルに重複する行があります。したがって、Rownumber = X
の1行の場合 Rows
内 テーブルRowno = X
の行が複数あります Temp_info
で テーブル。
SQLサーバーは、ソーステーブル内の重複する行のどの行を、ターゲットテーブル内の1つの行の更新に使用するかを知りたいと考えています。
[編集]
あなたの答えに応えて:オプションの1つは、マージを実行する前に複製することです:
with cte
as
(
select row_number() over(partition by RowNo order by DOB desc) RowNumber
from Temp_info
)
delete cte
where RowNumber > 1
DOB
を使用しました 最後のものを知るための順序を定義するフィールドとして。このフィールドを、注文に使用するフィールドに置き換えます。