我有table
名为tblFilterSum
且其primary key
为SumID
。另一个table
是tblFilterProd
,其primary key
是ProdID
。在两者之间存在n:m关系,由table
tblFilterProdsInSum
表示,其具有primary key
(SumID, ProdID)
的二维SumID
。很抱歉,ProdID
和foreign keys
不是SumID
,因此我修改了架构,使foreign key
成为references tblFilterSum(SumID)
,ProdID
和{{1}另一个foreign key
,references
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
?
答案 0 :(得分:1)
也许您可以重新投射一个因素以避免数字溢出
select avg(cast(tblFilterProdsInSum.SumID as float) + tblFilterProdsInSum.ProdID)