我有以下SQL查询,如果我删除顺序的最后一行,它是有效的。 任何人都可以告诉我,为什么当我在这个查询上下订单时这不起作用。
declare @UQ as decimal(20,6);
declare @MUQ as decimal(20,6);
select @UQ=ItemUnit_UnitQuantity, @MUQ=ItemUnit_MainUnitQuantity from tItemUnit
where ItemUnit_Id = 23996
select top 1 (InvBuyPriceValue/InvL_Quantity)*iu.ItemUnit_UnitQuantity/iu.ItemUnit_MainUnitQuantity*@MUQ/@UQ as InvBuyPrice, Discount
from tInvL l
left outer join tInvH h on h.InvH_Id = l.InvH_Id
left outer join tItem i on i.Item_Id = l.Item_Id
left outer join tItemUnit iu on iu.ItemUnit_Id = l.ItemUnit_Id
left outer join tUnit u on u.Unit_Id = iu.Unit_Id
left outer join tClientObj clo on clo.ClientObj_Id = h.ClientObj_Id
left outer join tDocType dt on dt.DocType_Id = h.DocType_Id
where h.CompanyObj_Id = (select CompanyObj_Id from tEnabledCompany where CompanyClientObj_Id=(select ClientObj_Id from tClientObj where ClientObj_Code = '504'))
and dt.DocType_InOut = 1
and l.Item_Id = 19558
and h.ClientObj_Id = 386
order by InvH_DocDate desc, InvH_DocTime desc
我收到错误说: 遇到零错误。
我不明白为什么我在订购时会收到此错误,而不是在例如select语句中...
答案 0 :(得分:1)
中有分歧
select top 1 (InvBuyPriceValue/InvL_Quantity)*iu.ItemUnit_UnitQuantity/iu.ItemUnit_MainUnitQuantity*@MUQ/@UQ
所以可能InvL_Quantity或iu.ItemUnit_MainUnitQuantity为零。
为什么不在没有ORDER BY的情况下看到SQL Server错误?您只是请求TOP 1行,因此SQL Server不需要遍历所有行并计算结果。出于性能原因,SQL Server只选择TOP 1行,计算结果并返回它。
你得到的是TOP 1除以零而不是偶然。如果你没有TOP 1并且你没有ORDER BY,你肯定会看到同样的错误。
答案 1 :(得分:0)
SELECT TOP 1
(InvBuyPriceValue / InvL_Quantity) *
iu.ItemUnit_UnitQuantity / iu.ItemUnit_MainUnitQuantity *
@MUQ / @UQ AS InvBuyPrice,
这是你执行分裂的唯一地方。 InvL_Quantity
或ItemUnit_MainUnitQuantity
列可能包含零值。
同时检查ItemUnit_UnitQuantity
,这是分配给@UQ
的值,也是一个除数。