SQL सर्वर में, यदि आपको त्रुटि संदेश 4127 मिल रहा है जिसमें लिखा है "COALESCE के लिए कम से कम एक तर्क एक अभिव्यक्ति होना चाहिए जो NULL स्थिरांक नहीं है", यह शायद इसलिए है क्योंकि आपके सभी तर्क COALESCE() अभिव्यक्ति NULL हैं स्थिर।
इस समस्या को ठीक करने के लिए, सुनिश्चित करें कि कम से कम एक तर्क NULL नहीं है स्थिर।
त्रुटि का उदाहरण
यहां कोड का एक उदाहरण दिया गया है जो इस त्रुटि को उत्पन्न करता है:
SELECT COALESCE( null, null ); हमें यह मिलता है:
Msg 4127, Level 16, State 1, Line 1 At least one of the arguments to COALESCE must be an expression that is not the NULL constant.
इस मामले में, सभी तर्क NULL . थे स्थिर, और इसलिए एक त्रुटि लौटा दी गई।
समाधान
समाधान आसान है। हमें केवल यह सुनिश्चित करने की आवश्यकता है कि कम से कम एक तर्क NULL नहीं है स्थिर:
SELECT COALESCE(null, 'Cat', 'Dog'); परिणाम:
Cat
इस मामले में, Cat पहला गैर था-NULL तर्क, और इसलिए COALESCE() वह मान लौटा दिया।
जैसा कि यहां देखा गया है, NULL . को शामिल करना ठीक है एक तर्क के रूप में स्थिर, जब तक कम से कम एक अन्य तर्क भी है जो नहीं है NULL स्थिर।
NULL एक्सप्रेशन और डेटाबेस कॉलम
ध्यान दें कि NULL स्थिरांक एक अभिव्यक्ति के समान नहीं है जिसके परिणामस्वरूप NULL . होता है . और यह डेटाबेस कॉलम के समान नहीं है जिसमें NULL . है .
उदाहरण के लिए, यदि सभी तर्क डेटाबेस कॉलम का संदर्भ देते हैं, और वे डेटाबेस कॉलम NULL . हैं , तो हमें त्रुटि नहीं मिलती है।
मान लीजिए कि हम निम्नलिखित क्वेरी चलाते हैं:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; परिणाम:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
दोनों कॉलम में NULL है मान।
तो अगर हम दोनों कॉलम COALESCE() . पर पास करते हैं , हमें NULL . का परिणाम मिलता है :
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; परिणाम:
NULL
यदि हम किसी एक कॉलम को NULL . से बदलते हैं तो भी यही बात लागू होती है स्थिर:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; परिणाम:
NULL
तो यह तभी है जब सब तर्क हैं NULL निरंतर कि हमें एक त्रुटि मिलती है।