सबसे पहले, CASE
कथन भाग होना चाहिए अभिव्यक्ति की नहीं, अभिव्यक्ति की।
दूसरे शब्दों में, आपके पास हो सकता है:
WHERE co.DTEntered = CASE
WHEN LEN('blah') = 0
THEN co.DTEntered
ELSE '2011-01-01'
END
लेकिन यह उस तरह से काम नहीं करेगा जैसा आपने उन्हें लिखा है जैसे:
WHERE
CASE LEN('TestPerson')
WHEN 0 THEN co.personentered = co.personentered
ELSE co.personentered LIKE '%TestPerson'
END
इस तरह के संयुक्त OR कथनों का उपयोग करके आप बेहतर भाग्य प्राप्त कर सकते हैं:
WHERE (
(LEN('TestPerson') = 0
AND co.personentered = co.personentered
)
OR
(LEN('TestPerson') <> 0
AND co.personentered LIKE '%TestPerson')
)
हालांकि, किसी भी तरह से मुझे यकीन नहीं है कि आपको एक क्वेरी प्लान कितना अच्छा मिलेगा। एक WHERE
. में इस प्रकार के षडयंत्र क्लॉज अक्सर क्वेरी ऑप्टिमाइज़र को इंडेक्स का उपयोग करने से रोकता है।