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

SQL Server でマージを使用して 3 番目のテーブルを更新する

    出力 の一時ストレージが必要です 一時テーブル/テーブル変数を使用するマージ ステートメントと更新ステートメントから。

    -- Your table A, B and C
    declare @A table(ID int, Col int)
    declare @B table(ID int, Col int)
    declare @C table(ID int, Col int)
    
    -- Sample data
    insert into @A values (1, 1),(2, 2)
    insert into @B values (1, 0)
    insert into @C values (1, 0),(2, 0)
    
    -- Table var to store ouput from merge
    declare @T table(ID int, Col int, Act varchar(10))
    
    -- Merge A -> B
    merge @B as B
    using @A as A
    on A.ID = B.ID
    when not matched then insert (ID, Col) values(A.ID, A.Col)
    when matched then update set Col = A.Col
    output inserted.ID, inserted.Col, $action into @T;
    
    -- Update C with rows that where updated by merge    
    update C set
      Col = T.Col
    from @C as C
      inner join @T as T
        on C.ID = T.ID and
           T.Act = 'UPDATE'
    

    https://data.stackexchange.com/stackoverflow/qt/119724/



    1. Oracleに1950年より前の日付を挿入する

    2. postgresqlのmysql_insert_id代替

    3. WHEREIN句のパラメータをPDOにバインドする

    4. 外部キー制約の追加に失敗しました。制約のインデックスがありませんエラーコード:1822