2
ALTER procedure [dbo].[performance]
@startdate nvarchar(100),
@enddate nvarchar(100)
as begin
set NOCOUNT on;
select l.LocName,
v.Vtype,
SUM(DATEDIFF(MI,t.Paydate,t.DelDate)) as TotalDiff,
[dbo].[testfunction](CONVERT(decimal(10,1), AVG(
CONVERT(NUMERIC(18,2), DATEDIFF(SS,t.Paydate,t.DelDate))))) as Average
from
Transaction_tbl t
left join
VType_tbl v
on t.vtid=v.vtid
left join
Location_tbl l
on t.Locid=l.Locid
where
t.Locid in(select t1.Locid from Transaction_tbl t1) and
dtime between '' + @startdate +'' and ''[email protected]+'' and
Status =5
group by v.Vtype,l.LocName,l.Locid order by l.Locid
end
также я одна функции, как это:Ошибки арифметического переполнения преобразования числового к типу данных во время выполнения хранимой процедуры
ALTER FUNCTION [dbo].[testfunction] (@dec NUMERIC(18, 2)) RETURNS Varchar(50)
AS
BEGIN
DECLARE
@hour integer,
@Mns integer,
@second decimal(18,3)
DECLARE @Average Varchar(50)
select @hour=CONVERT(int,@dec/60/60)
SELECT @Mns = convert(int, (@dec/60) - (@hour * 60));
select @[email protected] % 60;
SELECT @Average =
convert(varchar(9), convert(int, @hour)) + ':' +
right('00' + convert(varchar(2), convert(int, @Mns)), 2) + ':' +
right('00' + CONVERT(decimal(10,0), convert(varchar(6), @second)), 6)
RETURN @Average
END
передает дату, как это: 2013-01-01 и 2013-05-01 во время выполнения этой ошибки получения: ошибка арифметического переполнения, преобразующая числовые данные в тип данных varchar.
сэр это работает, если я даю небольшой daterange..if я даю большой дате diifernce (я имею в виду STARTDATE = «2013 -01-21 'и enddate =' 2013-08-01 '), на этот раз получив ту же самую ошибку – user2648161
Попробуйте это - 'EXEC [dbo]. [Performance] @startdate =' 20130121 ', @enddate =' 20130801'' – Devart
while выполнение этой же ошибки при получении – user2648161