Ao usar
CASE
instrução, todas as expressões de resultado devem ter o mesmo tipo de dados. Caso contrário, o resultado será convertido para o tipo de dados com maior precedência. De acordo com BOL
:Desde
INT
tem uma precedência de tipo de dados
mais alta do que VARCHAR
, "Weeks"
ser convertido para INT
e isso produz o erro:Outro exemplo que produzirá o mesmo erro:
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
A solução é converter
RS.intInterval
para VARCHAR
:CONVERT(VARCHAR(10), RS.intInterval)
Sua consulta final deve 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)