में कॉपी-इन-एसक्यूएल/16331659#16331659">जिस उत्तर से आपने टिप्पणियों में लिंक किया है
, जैसा कि मैंने आशापूर्वक स्पष्ट किया है, हम दुरुपयोग कर रहे हैं मर्ज
बयान।
आपके द्वारा यहां दिखाई गई क्वेरी को मामूली रूप से निम्न द्वारा प्रतिस्थापित किया जा सकता है:
insert into T(Col1) select Col1 from T where ID = 123
हालांकि, अगर आप OUTPUTकोड जोड़ने में सक्षम होना चाहते हैं कोड> खंड
, और वह OUTPUT
क्लॉज को नए डाले गए डेटा और दोनों को संदर्भित करने की आवश्यकता है स्रोत तालिका से डेटा, आपको INSERT
. पर ऐसा खंड लिखने की अनुमति नहीं है बयान।
इसलिए, हम इसके बजाय MERGE
. का उपयोग करते हैं बयान, लेकिन अपने इच्छित उद्देश्य के लिए नहीं। इसका पूरा उद्देश्य इसे INSERT
. करने के लिए बाध्य करना है और हमारा OUTPUT
लिखें खंड।
अगर हम MERGE
के दस्तावेज़ों की जांच करते हैं
, हम देखते हैं कि एकमात्र क्लॉज जिसमें हम INSERT
. करने के लिए निर्दिष्ट कर सकते हैं में है जब मेल नहीं खाता [लक्ष्य द्वारा]
खंड - दोनों में जब मिलान किया गया
और जब स्रोत से मेल नहीं खाता
खंड, हमारे लिए एकमात्र विकल्प अपडेट करें
. हैं या हटाएं
।
इसलिए, हमें MERGE
. लिखना होगा ऐसा कि मिलान हमेशा विफल रहता है - और ऐसा करने का सबसे आसान तरीका यह कहना है कि मिलान तब होना चाहिए जब 1 =0
- जो, उम्मीद है, कभी नहीं होगा।
चूंकि SQL सर्वर बूलियन लिटरल का समर्थन नहीं करता है