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)