将表达式转换为数据类型nvarchar时发生SQL算术溢出错误

将表达式转换为数据类型nvarchar时发生SQL算术溢出错误,sql,sql-server,where-clause,Sql,Sql Server,Where Clause,错误:将表达式转换为数据类型nvarchar时出现算术溢出错误 UPDATE [dbo].ForecastAccuracyKeyAccounts SET ThreeMonthPercent = ((Actual - ThreeMonthForecast) / Actual) * 100, SixMonthPercent = ((Actual - SixMonthForecast) / Actual) * 100, NineMonthPercent = ((Actual - NineMonthF

错误:将表达式转换为数据类型nvarchar时出现算术溢出错误

UPDATE [dbo].ForecastAccuracyKeyAccounts
SET ThreeMonthPercent = ((Actual - ThreeMonthForecast) / Actual) * 100, SixMonthPercent = ((Actual - SixMonthForecast) / Actual) * 100, 
NineMonthPercent = ((Actual - NineMonthForecast) / Actual) * 100
WHERE Actual != 0

因为,我要除以实际值,我想确保实际值不等于零。但是当我在WHERE子句中添加语句时,我无法消除错误。

也许可以尝试
ISNULL

UPDATE [dbo].ForecastAccuracyKeyAccounts

    SET ThreeMonthPercent = ((Actual - ISNULL(ThreeMonthForecast,0)) / Actual) * 100,

    SixMonthPercent = ((Actual - ISNULL(SixMonthForecast,0)) / Actual) * 100, 

    NineMonthPercent = ((Actual - ISNULL(NineMonthForecast,0)) / Actual) * 100

    WHERE Actual != 0

列的数据类型是什么?看起来在类型转换方面有点怪怪的。你用的是什么数据库?实际的浮点;三个月nvarchar(7);三个月预测浮标;在我添加Where子句之前,它工作得很好。唯一的错误是当实际列为0时。您能显示导致表达式失败的值吗?我不能完全确定。。。但是SQL Server是否保证处理顺序(
其中
设置之前
)?如果没有,它可以在应用
WHERE
子句之前首先计算
SET
语句。[在这种情况下,您需要在
SET
语句中测试
Actual=0
,例如…
/NULLIF(Actual,0)
]很抱歉格式化,我是从手机发帖的。三个月预测的值为空。这就是问题所在。使用IsNull应该可以修复它。这不起作用,我仍然会得到溢出错误。谢谢你的帮助!用手机打字很难!你能不能增加你的nvarchar(7)的大小,看看这是否有帮助。我支持从整体上改变数据类型?这是一个百分比,所以可以将其改为十进制?将三个月百分比、六个月百分比和九个月百分比改为浮动,看看是否有帮助。