Při použití CASE
musí mít všechny výsledné výrazy stejný datový typ. Pokud ne, bude výsledek převeden na datový typ s vyšší prioritou. Podle BOL
:
Od INT
má vyšší přednost datového typu
než VARCHAR
, "Weeks"
převést na INT
a to způsobí chybu:
Další příklad, který způsobí stejnou chybu:
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
Řešením je převod RS.intInterval
na VARCHAR
:
CONVERT(VARCHAR(10), RS.intInterval)
Váš poslední dotaz by měl znít:
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)