我有这个错误信息:

Msg 8134,级别16,状态1,第1行,除以零错误。

写SQL代码的最好方法是什么,这样我就再也不会看到这个错误消息了?

我可以做以下任何一件事:

添加where子句,使除数永远不为零

Or

我可以添加一个case语句,这样就可以对0进行特殊处理。

使用NULLIF子句是最好的方法吗?

有没有更好的办法,或者如何实施?


当前回答

你也可以在查询的开头这样做:

SET ARITHABORT OFF 
SET ANSI_WARNINGS OFF

如果你有100/0,它会返回NULL。我只做了简单的查询,所以我不知道它会如何影响更长的/复杂的查询。

其他回答

你也可以在查询的开头这样做:

SET ARITHABORT OFF 
SET ANSI_WARNINGS OFF

如果你有100/0,它会返回NULL。我只做了简单的查询,所以我不知道它会如何影响更长的/复杂的查询。

添加一个CHECK约束,强制除数为非零 向表单添加验证器,以便用户不能在该字段中输入零值。

SELECT Dividend / ISNULL(NULLIF(Divisor,0), 1) AS Result from table

通过使用nullif()捕获零,然后使用isnull()捕获结果为零,可以避免除零错误。

我是这样解决的:

IIF(ValueA != 0, Total / ValueA, 0)

它可以被包装在一个更新中:

SET Pct = IIF(ValueA != 0, Total / ValueA, 0)

或者在选择中:

SELECT IIF(ValueA != 0, Total / ValueA, 0) AS Pct FROM Tablename;

想法吗?

为了避免“除零”错误,我们编写了这样的程序:

Select Case when divisor=0 then null
Else dividend / divisor
End ,,,

但这里有一种更好的方式:

Select dividend / NULLIF(divisor, 0) ...

现在唯一的问题是记住NullIf位,如果我使用“/”键。