2015-11-24 50 views
-6

當我執行下面的代碼,我得到一個錯誤什麼是case語句此錯誤背後的原因

declare @var varchar(10)='a' 
select case @var 
when 'a' then 'hi' 
when 'b' then 'hello' 
else 123 
end 

錯誤信息是「消息245,級別16,狀態1,2號線 轉換將varchar值「hi」轉換爲數據類型int時失敗。「 但是當我修改了上面的代碼成功

declare @var varchar(10)='a' 
select case @var 
when 'a' then 'hi' 
when 'b' then 'hello' 
else cast(123 as char(4)) 
end 

enter image description here

執行的任何一個都可以解釋爲什麼當我執行之前的查詢我得到了錯誤? 在此先感謝

+1

出於同樣的原因它發生在大多數語言?您有*表達式*(不是語句)處理不同數據類型的值,所以[優先](https://msdn.microsoft.com/en-us/library/ms190309.aspx)被考慮在內。 –

+0

@jarlh - no,都包含'CASE'表達式。 SQL Server沒有'CASE'語句。 –

+0

@Damien_The_Unbeliever,對不起,對我來說太早了。只是刪除我的評論。現在需要一些咖啡。 – jarlh

回答

6

您的CASE...ELSE是123,這是一個整數。這優先於varchar數據類型。您看到錯誤,因爲SQL Server正在嘗試將其他值轉換爲整數數據類型。括在單引號ELSE值應該解決這個問題

declare @var varchar(10)='a' 
select case @var 
when 'a' then 'hi' 
when 'b' then 'hello' 
else '123' 
end 
+1

appriciated ...爲您的快速反應。 – asktosmart

+0

誰低估了答案,你能解釋一下自己嗎? – Raj

0

它,因爲你宣佈@varvarchar,和你想顯示在caseelse條件的int值。

所以肯定會發生轉換錯誤。

正如Raj回答的那樣,如果你在'123'周圍放置引號,它就可以工作。

+0

....我寫在其他塊....如果所有條件失敗,那麼可用的值應返回....我問爲什麼我得到錯誤 – asktosmart

相關問題