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

SQLServerMERGEステートメントに関する問題

    #Sの4つの値のいずれか ターゲットテーブルの単一行の値と一致します(#Sのすべての値はid =1およびname='A'であるため、すべてターゲットの単一行と一致します)。したがって、この値は4回更新されます。これがエラーです。と言います、そしてそれは絶対に正しいです。

    ここで本当に達成したいことは何ですか?

    アドレスをソーステーブルの最初の値に設定しますか? TOP 1を使用する 副選択の句:

    MERGE #T 
    USING (SELECT TOP 1 id, name, address FROM #S) AS S
    ON #T.id = S.id AND #T.Name = S.Name
    WHEN NOT MATCHED THEN
        INSERT VALUES(S.id,S.Name, S.Address)
    WHEN MATCHED THEN
        UPDATE SET Address = S.Address;
    

    アドレスをソーステーブルの値のランダムな要素に設定しますか? TOP 1を使用する およびORDER BY NEWID() 副選択の句:

    MERGE #T 
    USING (SELECT TOP 1 id, name, address FROM #S ORDER BY NEWID()) AS S
    ON #T.id = S.id AND #T.Name = S.Name
    WHEN NOT MATCHED THEN
        INSERT VALUES(S.id,S.Name, S.Address)
    WHEN MATCHED THEN
        UPDATE SET Address = S.Address;
    

    4つのソース行を1つのターゲット行に一致させると、有用な結果が得られることはありません。本当に必要なものを知る必要があります。

    マーク



    1. テーブルがMyISAMかInnodbかを確認するにはどうすればよいですか

    2. コントローラでトランザクション管理を行うのは悪い習慣ですか?

    3. エラー:ORA-01704:文字列リテラルが長すぎます

    4. MacでPythonを使用してOracleに接続するときにエラーが発生する-Oracleクライアントライブラリが見つかりません