我有两张桌子:
表1 :
ID ColA ColB Status
表2 :
ColA ColB
我正试图将表2 中的MERGE
条记录改为表1 ,其方式为:
Status = 1
Status = 1
Status = 0
是否有可能在一个声明中这样做?目前,我可以实现1
和2
,但我也不确定如何获得第三个:
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
的任何建议吗?
答案 0 :(得分:1)
你想要"不匹配来源"子句。
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
;