1

私は2つのテーブルを持っています:

表 1 :

ID ColA ColB Status

表 2 :

ColA ColB

次の方法で、表 2から表 1MERGEに記録しようとしています。

  1. 表 1にある表 2のすべての行について、次のように設定します。Status = 1
  2. 表 1 に存在しない表 2のすべての行について、その行を表 1に挿入して設定します。Status = 1
  3. 表 2に存在しない表 1のすべての行について、設定Status = 0

これを1つのステートメントで行うことは可能ですか?1現在、私は達成でき2ますが、3番目のものも取得する方法がわかりません:

MERGE INTO dbo.Table1 WITH(HOLDLOCK) AS Target
USING dbo.Table2 AS Source
ON Target.ColA = Source.ColA AND Target.ColB = Source.ColB
WHEN MATCHED THEN
    UPDATE SET Target.Status = 1
WHEN NOT MATCHED THEN
    INSERT (ColA, ColB, Status) VALUES(Source.ColA, Source.ColB, 1);

3同じステートメントで達成する方法について何か提案はありますか?

4

1 に答える 1

1

「NOT MATCHED BY SOURCE」句が必要です。

MERGE INTO dbo.Table1 WITH(HOLDLOCK) AS Target
USING dbo.Table2 AS Source
ON Target.ColA = Source.ColA AND Target.ColB = Source.ColB
WHEN MATCHED THEN
    UPDATE SET Status = 1
WHEN NOT MATCHED THEN
    INSERT (ColA, ColB, Status) VALUES(Source.ColA, Source.ColB, 1)
WHEN NOT MATCHED BY SOURCE THEN
    UPDATE SET Status = 0
;
于 2012-08-13T03:09:27.420 に答える