为什么avg会抛出错误?

时间:2016-10-24 17:46:41

标签: sql-server

我有table名为tblFilterSum且其primary keySumID。另一个tabletblFilterProd,其primary keyProdID。在两者之间存在n:m关系,由table tblFilterProdsInSum表示,其具有primary key (SumID, ProdID)的二维SumID。很抱歉,ProdIDforeign keys不是SumID,因此我修改了架构,使foreign key成为references tblFilterSum(SumID)ProdID和{{1}另一个foreign keyreferences tblFilterProd(ProdID)。我为tblFilterProdsInSum的{​​{1}}添加了降序索引,为SumID添加了另一个降序索引。现在我打算测量选择的速度,我写了以下脚本:

ProdID

这会引发以下错误:

  

将表达式转换为数据类型int的算术溢出错误。

declare @start datetime; set @start = CURRENT_TIMESTAMP; declare @index int; set @index = 0; while (@index < 1000) begin select avg(tblFilterProdsInSum.SumID + tblFilterProdsInSum.ProdID) from tblFilterSum join tblFilterProdsInSum on tblFilterSum.SumID = tblFilterProdsInSum.SumID join tblFilterProd on tblFilterProdsInSum.ProdID = tblFilterProd.ProdID set @index = @index + 1; end declare @end datetime; set @end = CURRENT_TIMESTAMP; select @start, @end, @end - @start; SumID都属于ProdID类型。我想知道这个错误的原因是什么。 SQL Server是否添加了所有值,然后除以int

1 个答案:

答案 0 :(得分:1)

也许您可以重新投射一个因素以避免数字溢出

select avg(cast(tblFilterProdsInSum.SumID as float) + tblFilterProdsInSum.ProdID)