Bij gebruik van CASE
statement, moeten alle resultaatexpressies hetzelfde gegevenstype hebben. Zo niet, dan wordt het resultaat geconverteerd naar het gegevenstype met een hogere prioriteit. Volgens BOL
:
Sinds INT
heeft een hogere voorrang voor gegevenstype
dan VARCHAR
, "Weeks"
word geconverteerd naar INT
en dat levert de fout op:
Een ander voorbeeld dat dezelfde fout oplevert:
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
De oplossing is om RS.intInterval
. te converteren naar VARCHAR
:
CONVERT(VARCHAR(10), RS.intInterval)
Uw laatste vraag zou moeten zijn:
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)