Lors de l'utilisation de CASE
, toutes les expressions de résultat doivent avoir le même type de données. Sinon, le résultat sera converti dans le type de données avec une priorité plus élevée. Selon BOL
:
Depuis INT
a une précédence des types de données
plus élevée que VARCHAR
, "Weeks"
être converti en INT
et cela produit l'erreur :
Un autre exemple qui produira la même erreur :
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
La solution est de convertir RS.intInterval
en VARCHAR
:
CONVERT(VARCHAR(10), RS.intInterval)
Votre requête finale devrait être :
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)