2016-03-01 32 views
2
CASE WHEN Items.SerialNumber = -1 THEN Items.Aux1 
ELSE Items.SerialNumber 
END AS 'CheckNo' 

這不起作用。我得到一個轉換varchar到int錯誤。我很困惑,因爲如果我將它作爲where查詢運行。我只是在案件陳述中發現錯誤,並不明白爲什麼。使用SQL獲取轉換錯誤Case語句

+5

什麼是'SerialNumber'的數據類型和'Aux1'列?你的'CASE'語句期望返回**一個**類型的數據。所以如果'SerialNumber'和'Aux1'是不同的數據類型,即'SerialNumber' ='varchar'和'Aux1' ='int',那麼這就是你的問題。 –

+0

這裏涉及的列的類型是什麼?你能否展示「工作」的例子? – David

+3

你使用的是什麼rdbms? –

回答

7

MSDNcase statement

返回從 result_expressions類型的集合和可選else_result_expression最高優先級的類型。

INT具有更高的優先級比所以varchar所有表達時將被隱式轉換爲INT。要了解更多有關數據類型優先check here

爲了避免整數轉換,轉換的INTVarcharwhen表達

SELECT CASE 
     WHEN Items.SerialNumber = -1 THEN Items.Aux1 
     ELSE Cast(Items.SerialNumber AS VARCHAR(100)) 
     END AS 'CheckNo' 
+0

謝謝我結束了在SerialNumber上使用轉換。我現在感覺超級慢。非常感謝您的幫助。 –