Когато използвате CASE
оператор, всички резултатни изрази трябва да имат един и същ тип данни. Ако не, резултатът ще бъде преобразуван в типа данни с по-висок приоритет. Според BOL
:
От INT
има по-висок приоритет на типа данни
отколкото VARCHAR
, "Weeks"
се преобразува в INT
и това води до грешката:
Друг пример, който ще доведе до същата грешка:
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
Решението е да конвертирате RS.intInterval
към VARCHAR
:
CONVERT(VARCHAR(10), RS.intInterval)
Последната ви заявка трябва да бъде:
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)