2015-10-14 135 views
3

我有一個select語句需要在它上面運行一個case語句來檢查一個值,然後輸入決定要獲取哪一列。當將varchar值'AJH 123'轉換爲數據類型int時,SQL轉換失敗int

呼叫的開始是本

select 
case when req.ReportStatusCode in ('draft','submitted') then 
req.ID else 
req.reportNumber 
end as [Request Id \ Report Number], 

然而,當我把這種我得到一個誤差變換將varchar值「AJH 123」爲數據類型int時

轉換失敗。

這是報告編號字段,並且我不知道我怎麼能阻止這個。

任何和所有幫助非常感謝

+0

什麼是ID和reportNumber的數據類型? – EricZ

+0

在MSDN中查看[this](https://msdn.microsoft.com/en-us/library/ms190309.aspx)文章。它解釋了爲什麼你會得到這個錯誤。 –

回答

5
case when req.ReportStatusCode in ('draft','submitted') 
then cast(req.ID as varchar(255)) else cast(req.reportNumber as varchar(255)) end 

確保case返回相同的數據類型。

+0

謝謝你的工作,但我必須等12分鐘才能接受答案 –

+0

不要懶惰指定長度或varchar,這是一個壞習慣使用。在某些情況下,它將默認爲長度1,請調試! http://stackoverflow.com/questions/359257/why-is-30-the-default-length-for-varchar-when-using-cast –

+0

@KM ...謝謝指出。我糾正了它。 –

1

這是因爲case語句應該評估爲一種類型,所以它在這裏將varchar轉換爲int。將int顯式轉換爲varchar:

select 
case when req.ReportStatusCode in ('draft','submitted') then 
    cast(req.ID as varchar(100)) else 
    req.reportNumber 
end as [Request Id \ Report Number], 
相關問題