Al usar CASE
instrucción, todas las expresiones de resultado deben tener el mismo tipo de datos. De lo contrario, el resultado se convertirá al tipo de datos con mayor prioridad. Según BOL
:
Desde INT
tiene una mayor precedencia del tipo de datos
que VARCHAR
, "Weeks"
convertirse a INT
y eso produce el error:
Otro ejemplo que producirá el mismo error:
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
La solución es convertir RS.intInterval
a VARCHAR
:
CONVERT(VARCHAR(10), RS.intInterval)
Su consulta final debe ser:
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)