Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Falha na conversão ao converter o valor varchar na instrução case


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)