CASE
. का उपयोग करते समय कथन, सभी परिणाम अभिव्यक्तियों में समान डेटा प्रकार होना चाहिए। यदि नहीं, तो परिणाम को उच्च प्राथमिकता वाले डेटा प्रकार में बदल दिया जाएगा। BOL
के अनुसार :
चूंकि INT
उच्च डेटा प्रकार वरीयता
है VARCHAR
. की तुलना में , "Weeks"
INT
. में कनवर्ट करें और वह त्रुटि उत्पन्न करता है:
एक और उदाहरण जो समान त्रुटि उत्पन्न करेगा:
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
समाधान RS.intInterval
. को कन्वर्ट करना है करने के लिए VARCHAR
:
CONVERT(VARCHAR(10), RS.intInterval)
आपकी अंतिम क्वेरी होनी चाहिए:
DECLARE @bFlag bit
SET @bFlag = 0
SELECT something = CASE
WHEN @bFlag = 1 THEN
CASE
WHEN RS.intInterval = 1 THEN '"Days"'
WHEN RS.intInterval = 2 THEN '"Weeks"'
WHEN RS.intInterval = 3 THEN '"Months"'
WHEN RS.intInterval = 4 THEN '"Years"'
END
Else
CONVERT(VARCHAR(10), RS.intInterval)
End
from MyTable AS RS WITH (NOLOCK)