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

データを 2 つの宛先テーブルにマージする

    理論的には、これを単一のステートメントで行うための解決策があるはずですが、これまでのところ見つけることができませんでした。 *

    2 つの MERGE で実行する方法は次のとおりです。 ステートメント:

    WITH CTE_trgt AS 
    (
        SELECT c.compid, c.ownerid, t.projid, t.active 
        FROM component c
        INNER JOIN trace t ON c.compid = t.compid
    )
    MERGE CTE_trgt t
    USING Donor s
    ON t.projid = s.projid
    WHEN NOT MATCHED BY TARGET
        THEN INSERT (ownerid)
        VALUES (s.ownerid)
    OUTPUT
        INSERTED.compid, s.projid, 1 INTO trace;
    
    
    MERGE trace t
    USING Donor s
    ON t.projid = s.projid
    WHEN NOT MATCHED BY SOURCE 
        THEN UPDATE SET t.active = 0;
      

    SQLFiddle デモ

    *Active列の更新部分:

    WHEN NOT MATCHED BY SOURCE 
        THEN UPDATE SET t.active = 0
      

    単一のマージ ステートメント を作成する上部のクエリに収まる必要があります。 ただし、エラーがスローされます:

    明らかに単一の列であっても、通常の非マージ更新は正常に機能します .誰かがこれの理由や回避策を知っているかもしれません.




    1. WAMPとmysqli::real_connect():(HY000 / 2002)?

    2. SQLServerでテーブル値関数を作成する

    3. MySQLがデフォルトとしてlatin1_swedish_ciを使用するのはなぜですか?

    4. PostgreSQLのさまざまなスキャン方法の概要