निम्न उदाहरण SQL सर्वर में दो तालिकाओं को मर्ज करने के लिए T-SQL का उपयोग करता है। यह VALUES
. का उपयोग करता है स्रोत तालिका के रूप में तालिका मान निर्माता।
मान लीजिए हम इस तरह एक टेबल बनाते हैं:
CREATE TABLE Idiots (
IdiotId int IDENTITY(1,1) NOT NULL,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Idiots VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders');
SELECT * FROM Idiots;
परिणाम:
+-----------+-------------+------------+ | IdiotId | FirstName | LastName | |-----------+-------------+------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +-----------+-------------+------------+
और मान लीजिए कि हम एक मर्ज ऑपरेशन करना चाहते हैं। हम नई पंक्तियाँ सम्मिलित करना चाहते हैं, लेकिन यदि कोई पंक्ति पहले से मौजूद मानों के साथ मौजूद है जो हमारे स्रोत से मेल खाते हैं, तो हम इसके बजाय मौजूदा पंक्ति को अपडेट करना चाहते हैं (नई पंक्ति सम्मिलित करने के बजाय)।
हम इसे इस तरह कर सकते हैं:
DECLARE @Changes TABLE(Change VARCHAR(20));
MERGE INTO Idiots AS Target
USING ( VALUES
(3, 'Ned', 'Okily Dokily!'),
(4, 'Lloyd','Christmas'),
(5, 'Harry', 'Dunne')
) AS Source ( IdiotId, FirstName, LastName )
ON Target.IdiotId = Source.IdiotId
AND Target.FirstName = Source.FirstName
WHEN MATCHED THEN
UPDATE SET FirstName = Source.FirstName, LastName = Source.LastName
WHEN NOT MATCHED BY TARGET THEN
INSERT (FirstName, LastName) VALUES (Source.FirstName, Source.LastName)
OUTPUT $action INTO @Changes;
SELECT Change, COUNT(*) AS Count
FROM @Changes
GROUP BY Change;
परिणाम:
+----------+---------+ | Change | Count | |----------+---------| | INSERT | 2 | | UPDATE | 1 | +----------+---------+
दो नई पंक्तियां डाली गईं और एक अपडेट की गई।
यहां, हमने टेबल वैल्यू कंस्ट्रक्टर (VALUES
.) का उपयोग किया है ) तालिका के लिए नए मान निर्दिष्ट करने के लिए।
इस मामले में हमने IdiotId
. की जांच की और FirstName
स्तंभ। मूल रूप से, यदि आईडी और प्रथम नाम समान हैं, तो हम एक नया डालने के बजाय मौजूदा पंक्ति को अपडेट करना चाहते हैं।
हमने WHEN MATCHED
. का उपयोग किया यह निर्दिष्ट करने के लिए कि क्या होना चाहिए जब हमारे VALUES
. से डेटा क्लॉज लक्ष्य तालिका में डेटा से मेल खाता है। इस मामले में, हम बस VALUES
. के नए डेटा के साथ पंक्ति को अपडेट करते हैं ।
हमने WHEN NOT MATCHED BY TARGET
. का इस्तेमाल किया यह निर्दिष्ट करने के लिए कि जब कोई मेल नहीं है तो क्या होना चाहिए। इस मामले में हम नए डेटा के साथ एक नई पंक्ति सम्मिलित करते हैं।
हमने @Changes
. नामक एक वेरिएबल का भी उपयोग किया है हमारे मर्ज ऑपरेशन के आउटपुट को देखने के लिए। हमने OUTPUT
. का इस्तेमाल किया इसके लिए मर्ज ऑपरेशन के बाद क्लॉज। यही हमें ऊपर दी गई परिणामी तालिका देता है।
मर्ज ऑपरेशन का उस पर पड़ने वाले प्रभाव को देखने के लिए अब हम लक्ष्य तालिका की जांच कर सकते हैं:
SELECT * FROM Idiots;
परिणाम:
+-----------+-------------+---------------+ | IdiotId | FirstName | LastName | |-----------+-------------+---------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Okily Dokily! | | 4 | Lloyd | Christmas | | 5 | Harry | Dunne | +-----------+-------------+---------------+
हम देख सकते हैं कि इडियट नंबर 3 (नेड) ने अपना अंतिम नाम अपडेट किया है। हम यह भी देख सकते हैं कि टेबल में दो नए इडियट्स (लॉयड और हैरी) जुड़ गए हैं।