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

Konvertering mislykkedes ved konvertering af varchar-værdien i case-sætning

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)



  1. Brug af alarmer og operatører i SQL Server

  2. Betydningen af ​​basislinjer

  3. Forespørgsel på flere tabeller

  4. MySQL og Matlab