Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

डेटा को दो गंतव्य तालिकाओं में मर्ज करें

सैद्धांतिक रूप से, एकल कथन में ऐसा करने का समाधान होना चाहिए, लेकिन मैं अभी तक इसे खोजने में असफल रहा हूं। **

यहां बताया गया है कि इसे दो 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;

SQLFiddle DEMO

*सक्रिय कॉलम को अपडेट करने का हिस्सा:

WHEN NOT MATCHED BY SOURCE 
    THEN UPDATE SET t.active = 0

एक एकल मर्ज स्टेटमेंट बनाते हुए ऊपरी क्वेरी में फ़िट होने में सक्षम होना चाहिए सभी कार्यों के लिए, लेकिन यह एक त्रुटि देता है:

भले ही यह स्पष्ट रूप से सिंगल कॉलम हो, और नियमित गैर-मर्ज अपडेट ठीक काम करता है . हो सकता है कि किसी को इसका कारण और/या समाधान पता हो।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2005 में दूसरा पहचान कॉलम अनुकरण करने के लिए ट्रिगर का उपयोग करना

  2. स्ट्रिंग sql से पहला नंबर मान निकालें

  3. SQL सर्वर अनुक्रमणिका का पुनर्निर्माण और पुनर्गठन करता है

  4. SQL सर्वर में स्वचालित डेटाबेस परीक्षण पुनर्स्थापित करें

  5. क्या कोई विदेशी कुंजी स्वचालित रूप से एक अनुक्रमणिका बनाती है?