2012-10-23 169 views
0

我有一個表#DateDay_temp,其中有類型的NVARCHAR(20)類型。當我嘗試當我傳遞值54.56在ExtraAdultPrice「列在存儲過程中將nvarchar轉換爲int時出錯

DECLARE @ExtraAdultPAX DECIMAL(10,2) 

SELECT 
    @ExtraAdultPAX = SUM(CAST((CASE ISNULL(ExtraAdultPrice, '') 
            WHEN '' THEN 0 
            ELSE ExtraAdultPrice END) AS DECIMAL(10,2))) 
FROM #DateDay_temp; 

運行此聲明,我得到的錯誤轉換nvarchar的值時

轉換失敗'54 0.56' 到數據 int類型。

幫助將不勝感激。

+1

'54.56'是**不是** int **值..... –

+3

而** WHY **是類型爲'NVARCHAR( 20)'?!?!?!? –

+0

因爲它可以有任何值 –

回答

0

54.56因小數點而不是int。

+0

這是我卡在哪裏。 –

+0

由於@marc_s建議您需要使用小數點,如果您保留小數點。 – DaveHogan

2

最可能發生此錯誤的原因是您的CASE語句中有0;因此,在CASE聲明「式的」被決定的INT - 這是在這裏完全錯了....

試試這個:

SELECT 
    @ExtraAdultPAX = SUM(CAST((CASE ISNULL(ExtraAdultPrice, '') 
           WHEN '' THEN 0.00 <<== use "0.00" instead of just "0" !! 
           ELSE ExtraAdultPrice 
           END) AS DECIMAL(10,2))) 
FROM 
    #DateDay_temp; 

現在,一切都應該是DECIMAL(10,2)和不該存在沒有任何嘗試將您的值轉換爲INT

+0

這確實會改變語義。 OP的原始代碼會將NULL或空字符串視爲零。如果他們只關心'NULL',那麼無論如何都會在'SUM'中忽略它們。 –

+0

@marc_s:當ExtraAdultPrice呈現空值或空值時,我收到錯誤「將數據類型nvarchar轉換爲數字時出錯」。 –

+0

@palakmehta:更新了我的響應 - 現在它應該將NULL和空格轉換爲'0.00'並將其總結爲'DECIMAL(10,2)' –

相關問題