Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Conversione non riuscita durante la conversione del valore varchar nell'istruzione case

Quando si utilizza CASE istruzione, tutte le espressioni di risultato devono avere lo stesso tipo di dati. In caso contrario, il risultato verrà convertito nel tipo di dati con una precedenza più alta. Secondo BOL :

Da INT ha una precedenza del tipo di dati di VARCHAR , "Weeks" convertiti in INT e questo produce l'errore:

Un altro esempio che produrrà lo stesso errore:

SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END

La soluzione è convertire RS.intInterval a VARCHAR :

CONVERT(VARCHAR(10), RS.intInterval)

La tua domanda finale dovrebbe essere:

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)