एकाधिक तालिकाओं के आधार पर डेटा मर्ज करें

Complete

डेटाबेस कार्रवाई में, कभी-कभी SQL MERGE कार्रवाई करने की आवश्यकता होती है। यह DML विकल्प आपको दूसरी तालिका में पाए गए अंतरों के आधार पर एक तालिका में पंक्तियों को सम्मिलित करने, अद्यतन करने या हटाने के द्वारा दो तालिकाओं को सिंक्रनाइज़ करने की अनुमति देता है। संशोधित की जा रही तालिका को लक्ष्य तालिका के रूप में संदर्भित किया जाता है। वह तालिका जिसका उपयोग यह निर्धारित करने के लिए किया जाता है कि कौन सी पंक्तियों को बदलना है, स्रोत तालिका कहलाती है।

MERGE एक या अधिक शर्तों के आधार पर डेटा संशोधित करता है:

  • जब स्रोत डेटा में लक्ष्य तालिका में मेल खाने वाली पंक्ति होती है, तो यह लक्ष्य तालिका में डेटा को अपडेट कर सकता है।
  • जब स्रोत डेटा का लक्ष्य में कोई मिलान नहीं होता है, तो यह लक्ष्य तालिका में डेटा सम्मिलित कर सकता है।
  • जब स्रोत में लक्ष्य डेटा का कोई मिलान नहीं होता है, तो यह लक्ष्य डेटा को हटा सकता है।

MERGE कथन का सामान्य सिंटैक्स नीचे दिखाया गया है। हम एक निर्दिष्ट कॉलम पर लक्ष्य और स्रोत का मिलान कर रहे हैं, और यदि लक्ष्य और स्रोत के बीच कोई मिलान है, तो हम लक्ष्य तालिका पर लेने के लिए एक कार्रवाई निर्दिष्ट करते हैं। यदि कोई मिलान नहीं है, तो हम एक कार्रवाई निर्दिष्ट करते हैं। क्रिया एक सम्मिलित करें, अद्यतन या हटाएँ कार्रवाई हो सकती है. यह कोड इंगित करता है कि स्रोत और लक्ष्य के बीच मिलान होने पर एक अद्यतन किया जाता है। एक INSERT तब किया जाता है जब स्रोत में डेटा होता है जिसमें लक्ष्य में कोई मिलान डेटा नहीं होता है। अंत में, एक DELETE तब किया जाता है जब स्रोत में कोई मिलान नहीं होने के साथ लक्ष्य में डेटा होता है। MERGE कथन के कई अन्य संभावित रूप हैं।

MERGE INTO schema_name.table_name AS TargetTbl
USING (SELECT <select_list>) AS SourceTbl
ON (TargetTbl.col1 = SourceTbl.col1)
WHEN MATCHED THEN 
   UPDATE SET TargetTbl.col2 = SourceTbl.col2
WHEN NOT MATCHED [BY TARGET] THEN
   INSERT (<column_list>)
   VALUES (<value_list>)
WHEN NOT MATCHED BY SOURCE THEN
   DELETE;

आप केवल मर्ज कथन के उन तत्वों का उपयोग कर सकते हैं जिनकी आपको आवश्यकता है. उदाहरण के लिए, मान लें कि डेटाबेस में चरणबद्ध इनवॉइस अद्यतनों की एक तालिका शामिल है, जिसमें मौजूदा इनवॉइस और नए इनवॉइस में संशोधन का मिश्रण शामिल है. आप आवश्यकतानुसार इनवॉइस डेटा को अपडेट करने या सम्मिलित करने के लिए WHEN MATCH और When not matched क्लॉज़ का उपयोग कर सकते हैं।

MERGE INTO Sales.Invoice as i
USING Sales.InvoiceStaging as s
ON i.SalesOrderID = s.SalesOrderID
WHEN MATCHED THEN
    UPDATE SET i.CustomerID = s.CustomerID,
                i.OrderDate = GETDATE(),
                i.PurchaseOrderNumber = s.PurchaseOrderNumber,
                i.TotalDue = s.TotalDue
WHEN NOT MATCHED THEN
    INSERT (SalesOrderID, CustomerID, OrderDate, PurchaseOrderNumber, TotalDue)
    VALUES (s.SalesOrderID, s.CustomerID, s.OrderDate, s.PurchaseOrderNumber, s.TotalDue);