2016-11-16 15 views
-2

Deletedフラグ(bit)のカラムを持つテーブルがあります。どのようにそれを実現することが可能ですか?この列以下の条件でテーブル内の削除されたフラグ

  • レコードが新規または更新され、0

に設定されたソースから削除された場合は1

  • に設定されている場合は、私が思いますそれはマージステートメントで行うことが可能です。しかし、私はこれを行う方法を知らない。それとも別の方法がありますか?

  • +0

    シンプル? (私は実際にあなたが1または0をどのように設定するかはわかりません...)あなたの編集によれば、それはむしろ 'WHERE FlagColumn = 0'であるべきです... **実際のデータを持つCarefull !!! ** – Shnugo

    答えて

    0

    私はあなたがこれを行うには、MERGE文を使用できると思います:

    merge into myTable using SourceTable 
    on myTable.pk = sourcetable.pk  
    when matched then update set 
    /*add any update columns here*/ 
    Deleted = 0  
    when not matched by target then insert 
    (pk, abcd, deleted) 
    values 
    (pk, xyz, 0) 
    when not matched by source then update set Deleted = 1 
    

    これは、ターゲット表に存在しない任意の行を挿入します。一致する行と宛先の行はすべて更新されますが、ソースにはフラグが1に更新されます。

    +0

    ありがとう、おい! –

    0

    Deletedフラグのノルムは、削除されていないため、0になるため、要件を再確認してください。削除済みの場合は1です。 0はfalse、1はtrueです。それはとても一般的です、実際には、私はそれがあなたが望んでいたと仮定しようとしています。 MERGEでそれを設定するよう

    、あなたのような何かをしたいと思います:

    `DELETE YourTable FlagColumn = '1'として
    MERGE MyTable as Target 
    USING YourTable as Source ON 
        Target.Id = Source.Id 
    WHEN MATCHED THEN 
        --Exists in both Source and Target 
        UPDATE SET Deleted = 0 /* include other columns to update here */ 
    WHEN NOT MATCHED BY Source THEN 
        --Source was deleted 
        UPDATE SET Deleted = 1 
    WHEN NOT MATCHED BY Target THEN 
        --Source was added 
        INSERT (Id, Deleted /* include other columns to insert here */) 
        VALUES (Source.Id, 1 /* include other columns to insert here */); 
    
    関連する問題