2017-09-16 109 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数据类型的评论。 –

相关问题