У меня есть table
под названием tblFilterSum
и его primary key
is 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
другой foreign key
, который references
tblFilterProd(ProdID)
. Я добавил нисходящий индекс к tblFilterProdsInSum
за SumID
и еще один нисходящий индекс для ProdID
. Теперь я намерен измерять скорость отбора и я написал следующий скрипт:Почему avg выдает ошибку?
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;
Это выдает следующее сообщение об ошибке:
Arithmetic overflow error converting expression to data type int.
Оба SumID
и ProdID
имеют int
типа. Интересно, в чем причина этой ошибки. SQL Server добавляет все значения, а затем делит на count
?
На основе исключения в результате добавления SumID и PRODID, вероятно, за пределами диапазона целого типа данных (https: // msdn.microsoft.com/en-us/library/ms187745.aspx). Итак, каковы значения SumID в ProdID в этом случае? –
Это большие целые числа. –