遇到SQL存储过程被零除的错误。
试图找出为什么我的存储过程会给我一个“被零除”的错误,我已经把它缩小到这个区域。如果我注释掉以下行,查询将成功运行。我不知道为什么遇到SQL存储过程被零除的错误。,sql,sql-server,stored-procedures,divide-by-zero,Sql,Sql Server,Stored Procedures,Divide By Zero,试图找出为什么我的存储过程会给我一个“被零除”的错误,我已经把它缩小到这个区域。如果我注释掉以下行,查询将成功运行。我不知道为什么 PartReceived.QuantityReceived / (CASE WHEN PurchaseOrderItem.QuantityOrdered IS NULL THEN PurchaseOrderItem.QuantityOrdered WH
PartReceived.QuantityReceived /
(CASE
WHEN PurchaseOrderItem.QuantityOrdered IS NULL THEN PurchaseOrderItem.QuantityOrdered
WHEN PurchaseOrderItem.QuantityOrdered = 0 THEN PurchaseOrderItem.QuantityOrdered
ELSE PurchaseOrderItem.QuantityOrdered
END) * 100.0 AS PercentageReceived
我确实在出错之前收到了这个警告,但我做了很多谷歌搜索引导我做的事情。我尝试过使用IFNULL而不是IS NULL,但这似乎也不起作用
Warning: Null value is eliminated by an aggregate or other SET operation.
使用
NULLIF()
,可以避免被零除:
这会将结果返回为NULL
,而不是生成错误
实际上,您的逻辑更容易写成:
(PartReceived.QuantityReceived /
NULLIF(PurchaseOrderItem.QuantityOrdered, 0)
) * 100.0 AS PercentageReceived
案例
没有任何作用。所有三个THEN
子句返回相同的值。有效。在您指出之前,我没有注意到它们都返回了相同的值。谢谢戈登!
(PartReceived.QuantityReceived /
NULLIF(PurchaseOrderItem.QuantityOrdered, 0)
) * 100.0 AS PercentageReceived