sql >> Database >  >> RDS >> Sqlserver

Conversie mislukt bij het converteren van de varchar-waarde in case-statement

Bij gebruik van CASE statement, moeten alle resultaatexpressies hetzelfde gegevenstype hebben. Zo niet, dan wordt het resultaat geconverteerd naar het gegevenstype met een hogere prioriteit. Volgens BOL :

Sinds INT heeft een hogere voorrang voor gegevenstype dan VARCHAR , "Weeks" word geconverteerd naar INT en dat levert de fout op:

Een ander voorbeeld dat dezelfde fout oplevert:

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

De oplossing is om RS.intInterval . te converteren naar VARCHAR :

CONVERT(VARCHAR(10), RS.intInterval)

Uw laatste vraag zou moeten zijn:

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. Hoe om te gaan met fouten in in SQL Server geneste transacties

  2. 9.6 Engste Patch Toernooi

  3. Laravel-project ERR_EMPTY_RESPONSE

  4. Afbeeldingen opslaan in SQL Server?