Saat menggunakan CASE
pernyataan, semua ekspresi hasil harus memiliki tipe data yang sama. Jika tidak, hasilnya akan dikonversi ke tipe data dengan prioritas lebih tinggi. Menurut BOL
:
Sejak INT
memiliki prioritas jenis data
yang lebih tinggi dari VARCHAR
, "Weeks"
dikonversi ke INT
dan itu menghasilkan kesalahan:
Contoh lain yang akan menghasilkan kesalahan yang sama:
SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
Solusinya adalah mengonversi RS.intInterval
ke VARCHAR
:
CONVERT(VARCHAR(10), RS.intInterval)
Permintaan terakhir Anda seharusnya:
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)