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)