COALESCE विधि का उपयोग करने में एक समस्या है यदि आपके कॉलम में एक पूर्ण मूल्य है, जो एक पूर्ण खोज स्थिति (अर्थात् खोज स्थिति को अनदेखा करता है) में कई डेटाबेस में पंक्ति वापस नहीं करेगा।
CREATE TABLE dbo.Test_Coalesce (
my_id INT NOT NULL IDENTITY,
my_string VARCHAR(20) NULL)
GO
INSERT INTO dbo.Test_Coalesce (my_string) VALUES (NULL)
INSERT INTO dbo.Test_Coalesce (my_string) VALUES ('t')
INSERT INTO dbo.Test_Coalesce (my_string) VALUES ('x')
INSERT INTO dbo.Test_Coalesce (my_string) VALUES (NULL)
GO
DECLARE @my_string VARCHAR(20)
SET @my_string = NULL
SELECT * FROM dbo.Test_Coalesce WHERE my_string = COALESCE(@my_string, my_string)
GO
आप केवल वापस क्योंकि पंक्तियों जहां स्तंभ my_string शून्य है आप प्रभावी हो रही हैं में दो पंक्तियों मिल जाएगा:
उदाहरण के लिए, SQL सर्वर पर निम्नलिखित कोड 2000 कोशिश
my_string = COALESCE(@my_string, my_string) =>
my_string = COALESCE(NULL, my_string) =>
my_string = my_string =>
NULL = NULL
लेकिन बेशक, न्यूल शून्य के बराबर नहीं है।
मैं के साथ छड़ी करने की कोशिश:
SELECT
my_id,
my_string
FROM
dbo.Test_Coalesce
WHERE
(@my_string IS NULL OR my_string = @my_string)
बेशक, आपको लगता है कि वाइल्ड कार्ड या जो कुछ भी आप करना चाहते हैं उपयोग करने के लिए समायोजित कर सकते हैं।
स्रोत
2008-10-15 18:14:18
मुझे लगता है कि कैड रॉक्स के समाधान मेरे लिए सबसे अच्छा काम किया के बाद से मैं लक्ष्य तालिका में शून्य डेटा मानों का एक बहुत था यहाँ उल्लेख करना चाहता था, लेकिन मैं देख सकता है कितनी अच्छी तरह COALESCE अगर मैं के सभी में डेटा था काम करेगा मेरी कॉलम, इसलिए बोल्टबेट के समाधान पर उपरोक्त निश्चित रूप से योग्यता की गारंटी देता है। –
हारून बर्ट्रैंड ने इसे "रसोई सिंक प्रक्रिया" कहा है और इस प्रकार की समस्या से निपटने के कुछ अच्छे विचार हैं जिन्हें http://sqlsentry.tv/the-kitchen-sink-procedure/ और http: // ब्लॉग पर देखा जा सकता है .sqlsentry.com/aaronbertrand/backtobasics अद्यतन-रसोई-सिंक-उदाहरण /। – JamieSee