2015-11-07 51 views
0

我正在SQL Server 2008(Management Studio)中工作。在SQL Server中,如何正確使用混合類型(str和int)的語句?

我試圖在兩種情況下更新表。這些條件是由一列數據和字符串和整型數據確定的。當我把此switch語句:

update #model_data set tires = case 
    when vehicles = 1 and age = 1 then 2 
    when vehicles = 1 and age = 2 then 3 
    when vehicles = 1 and age = '3+' then 4 
end 

注意,車輛可以是1,2,或 '3+'。年齡也可以是1,2,或「3 +」。我不斷收到寫着

"Conversion failed when converting the varchar value '3+' to data type int." 

我試着用搜索引擎周圍約混合類型平等信息的錯誤消息,但我真的不知道是什麼我在找。任何幫助,將不勝感激,因爲我不是最經驗豐富的SQL用戶(如果你不能說......)。

我很確定它與列中的混合類型有關,但我無法做任何似乎糾正它的轉換和轉換語句的組合。

+1

列不包含「混合類型」,也許你將1的整數與1的字符混淆。 –

回答

0

你可能只是這樣做,而不是:

update #model_data set tires = case 
    when vehicles = '1' and age = '1' then 2 
    when vehicles = '1' and age = '2' then 3 
    when vehicles = '1' and age = '3+' then 4 
end 

這樣可以幫助您始終使用與轉換/鑄造沒有隱含需要的字符。我假設車輛和年齡都是角色。

+0

是的,現在我覺得有點愚蠢,完全有效,我不明白爲什麼我能夠在腳本的其他部分對int值進行比較?是否有一些默認轉換髮生? – joe

+1

是的,因爲您使用age = 1和age ='3 +',數據庫必須選擇是否進行基於字符或整數的比較,在這種情況下,默認情況下,它會根據整數選擇比較,當時間到達過程3+時,出現錯誤。 – zedfoxus

+1

有三個主題可以幫助您理解SQL爲什麼起作用或失敗。: [數據類型優先級(Transact-SQL)](https://msdn.microsoft.com/en-us/library/ms190309.aspx) [Data Type Conversi (數據庫引擎)](https://msdn.microsoft.com/en-us/library/ms191530.aspx) [常量(Transact-SQL)](https://msdn.microsoft.com/en-us /library/ms179899.aspx) – Bill

相關問題