Når du bruger CASE
sætning, skal alle resultatudtryk have samme datatype. Hvis ikke, vil resultatet blive konverteret til datatypen med en højere prioritet. Ifølge BOL
:
Siden INT
har en højere datatypeprioritet
end VARCHAR
, "Weeks"
blive konverteret til INT
og det giver fejlen:
Et andet eksempel, der vil producere den samme fejl:
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
Løsningen er at konvertere RS.intInterval
til VARCHAR
:
CONVERT(VARCHAR(10), RS.intInterval)
Din sidste forespørgsel skal være:
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)