sql >> データベース >  >> RDS >> Sqlserver

メッセージ8672、レベル16、状態1、行1 MERGEステートメントが、同じ行を複数回更新または削除しようとしました

    これは、ターゲット行が複数のソース行と一致する場合に発生します。
    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を使用しました 最後のものを知るための順序を定義するフィールドとして。このフィールドを、注文に使用するフィールドに置き換えます。




    1. SQLiteビューの作成

    2. MySQLとMongoDB

    3. T-SQLの場合と同じように、PL / SQLで変数を宣言して使用するにはどうすればよいですか?

    4. トランザクションの影響を受けないシーケンス?