2017-09-16 110 views
0

我有以下代碼來計算重量,但是當我運行它我得到算術溢出錯誤將表達式轉換數據類型爲nvarchar

算術溢出錯誤將表達式轉換數據類型爲nvarchar

UPDATE T1 
SET [1 WO # WGHT] = CASE 
         WHEN t2.[WEIGHT] = 'NMI' THEN 0 
         WHEN t2.[WEIGHT] = '' THEN 0 
         WHEN t2.[WEIGHT] IS NULL THEN 0 
         ELSE CAST(t2.[WEIGHT] AS float) 
        END 
FROM [PACKING SLIPS] T1 
INNER JOIN inserted i ON T1.[AUTO PACK SLIP #] = i.[AUTO PACK SLIP #] 
CROSS APPLY 
    (SELECT TOP 1 * 
    FROM [WORKORDERS] T2 
    WHERE T1.[1. WO #] = T2.[WORK ORDER NO.]) T2 
+2

可能重複[錯誤無法將數據類型nvarchar轉換爲浮點數](https://stackoverflow.com/questions/26765604/error-unable-to-convert-data-type-nvarchar-to-float) – Tanner

+0

什麼所涉及的所有表的定義是什麼? –

回答

0

將CASE表達式替換爲以下內容...

ISNULL(TRY_CAST(t2.WEIGHT AS FLOAT), 0) 

如果您使用SQL Server的舊版本(2008R2和更早的版本),下面的工作,以及...

CAST(CASE WHEN t2.WEIGHT NOT LIKE '%[^0-9.]%' THEN t2.WEIGHT ELSE '0' END AS FLOAT) 

邊注...你不應該永遠請使用FLOAT或REAL數據類型轉換爲貨幣值。如果您不想使用MOMEY或SMALLMONEY,請考慮使用DECIMAL或NUMERIC。

+0

我得到TRY_CAST無法識別內置函數 – user8066749

+0

您使用的是哪個版本的SQL Server? –

+0

@ user8066749 - 爲老版本的SQL Server添加代碼。另請參閱有關FLOAT數據類型的評論。 –

相關問題