सैद्धांतिक रूप से, एकल कथन में ऐसा करने का समाधान होना चाहिए, लेकिन मैं अभी तक इसे खोजने में असफल रहा हूं। **
यहां बताया गया है कि इसे दो 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;
*सक्रिय कॉलम को अपडेट करने का हिस्सा:
WHEN NOT MATCHED BY SOURCE
THEN UPDATE SET t.active = 0
एक एकल मर्ज स्टेटमेंट बनाते हुए ऊपरी क्वेरी में फ़िट होने में सक्षम होना चाहिए सभी कार्यों के लिए, लेकिन यह एक त्रुटि देता है:
भले ही यह स्पष्ट रूप से सिंगल कॉलम हो, और नियमित गैर-मर्ज अपडेट ठीक काम करता है . हो सकता है कि किसी को इसका कारण और/या समाधान पता हो।