我有这个错误信息:
Msg 8134,级别16,状态1,第1行,除以零错误。
写SQL代码的最好方法是什么,这样我就再也不会看到这个错误消息了?
我可以做以下任何一件事:
添加where子句,使除数永远不为零
Or
我可以添加一个case语句,这样就可以对0进行特殊处理。
使用NULLIF子句是最好的方法吗?
有没有更好的办法,或者如何实施?
我有这个错误信息:
Msg 8134,级别16,状态1,第1行,除以零错误。
写SQL代码的最好方法是什么,这样我就再也不会看到这个错误消息了?
我可以做以下任何一件事:
添加where子句,使除数永远不为零
Or
我可以添加一个case语句,这样就可以对0进行特殊处理。
使用NULLIF子句是最好的方法吗?
有没有更好的办法,或者如何实施?
当前回答
为了避免“除零”错误,我们编写了这样的程序:
Select Case when divisor=0 then null
Else dividend / divisor
End ,,,
但这里有一种更好的方式:
Select dividend / NULLIF(divisor, 0) ...
现在唯一的问题是记住NullIf位,如果我使用“/”键。
其他回答
你至少可以阻止查询被错误打断,如果有被0除,返回NULL:
SELECT a / NULLIF(b, 0) FROM t
然而,我永远不会像其他得到很多赞的答案那样,用合并将其转换为零。从数学意义上讲,这是完全错误的,甚至是危险的,因为您的应用程序可能会返回错误和误导性的结果。
你也可以在查询的开头这样做:
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
如果你有100/0,它会返回NULL。我只做了简单的查询,所以我不知道它会如何影响更长的/复杂的查询。
为了避免“除零”错误,我们编写了这样的程序:
Select Case when divisor=0 then null
Else dividend / divisor
End ,,,
但这里有一种更好的方式:
Select dividend / NULLIF(divisor, 0) ...
现在唯一的问题是记住NullIf位,如果我使用“/”键。
添加一个CHECK约束,强制除数为非零 向表单添加验证器,以便用户不能在该字段中输入零值。
使用where子句过滤数据,这样就不会得到0值。