Theoretisch zou er een oplossing moeten zijn om dit in één verklaring te doen, maar ik heb het tot nu toe niet kunnen vinden. *
Hier is hoe het kan worden gedaan met twee MERGE
uitspraken:
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;
*Onderdeel met updaten Actieve kolom:
WHEN NOT MATCHED BY SOURCE
THEN UPDATE SET t.active = 0
zou in de bovenste query moeten passen en een enkele samenvoeginstructie maken voor alle bewerkingen, maar het geeft een foutmelding:
zelfs als het duidelijk een enkele kolom is, en normale niet-samenvoegingsupdate werkt prima . Misschien weet iemand hier een reden en/of een oplossing voor.