【问题标题】:Arithmetic overflow error converting expression data type nvarchar转换表达式数据类型 nvarchar 的算术溢出错误
【发布时间】:2017-09-16 05:33:14
【问题描述】:

我有以下代码来计算重量,但是当我运行它时,我得到了

转换表达式数据类型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

【问题讨论】:

标签: sql-server tsql


【解决方案1】:

将 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。

【讨论】:

  • 我得到 TRY_CAST 无法识别内置函数
  • 您使用的是什么版本的 SQL Server?
  • @user8066749 - 添加了旧版本 SQL Server 的代码。另请参阅有关 FLOAT 数据类型的 cmets。
  • 谢谢你,杰森,我试过CASE WHEN isnull(t2.[WEIGHT],0)!='NMI' THEN CAST(CASE WHEN t2.WEIGHT NOT LIKE '%[^0-9.]%' THEN t2.WEIGHT ELSE '0' END AS FLOAT) else 0 end,但现在我得到arithmetic overflow error converting expression data type nvarcharWORKORDER 表中的重量错误18.032 其他看起来不错,但只有一个重量18.032跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2023-03-15
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多