理論的には、これを単一のステートメントで行うための解決策があるはずですが、これまでのところ見つけることができませんでした。 *
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;
プレ>*Active列の更新部分:
WHEN NOT MATCHED BY SOURCE THEN UPDATE SET t.active = 0
プレ>単一のマージ ステートメント を作成する上部のクエリに収まる必要があります。 ただし、エラーがスローされます:
明らかに単一の列であっても、通常の非マージ更新は正常に機能します .誰かがこれの理由や回避策を知っているかもしれません.