在开发的代码中面临超时过期问题。下面分享的是发生超时的存储过程。代码的目的:从前端传递的日期(使用 Windows 应用程序 vb.net 代码中的 forloop)用于 100 万个案例,需要根据收到的日期计算日期差异。
create procedure sp_getdatediff
@strd1 date = null,
@strd2 date = null,
@strd3 date = null,
@strd4 date = null,
@strd5 date = null,
@strd6 date = null,
@strd7 date = null,
@strd8 date = null,
@strd9 date = null,
@strd10 date = null,
@strd11 date = null
as
begin
declare @vardatediff1 int
declare @vardatediff2 int
declare @vardatediff3 int
declare @vardatediff4 int
declare @vardatediff5 int
set @vardatediff1 = [fn_getdiff](@strd1,@strd2,@strd3) ----- input parameters are dates passed from frontend
set @vardatediff2 = [fn_getdiff](@strd2,@strd4,@strd5)
set @vardatediff3 = [fn_getdiff](@strd4,@strd5,@strd6)
set @vardatediff4 = [fn_getdiff](@strd5,@strd7,@strd8)
set @vardatediff5 = [fn_getdiff](@strd9,@strd10,@strd11)
update tbl_Scheduler set col_dif1 = @vardatediff1 , col_dif2 = @vardatediff2 ,
col_dif3 = @vardatediff3 , col_dif4 = @vardatediff4 , col_dif5 = @vardatediff5
where id = @id
end
功能代码:
create function [fn_getdiff]
(
@startdate date = null,
@enddate date = null,
@ccode varchar(10) = null
)
returns integer
as
begin
declare @count integer
declare @tdaycount integer
if (@startdate is null or @startdate = '')
begin
set @count = 0
end
else if (@enddate is null or @enddate = '')
begin
set @count = 0
end
else
begin
select @tdaycount = count(distinct(convert(date,tdays))) from tbl_holidays with (nolock) where (convert(date,tdays,105) >= convert(date,@startdate,105))
and (convert(date,tdays,105) <= convert(date,@enddate,105)) and tcode in (select id from tbl_code with (nolock) where id = @ccode)
select @count = datediff(@startdate,@enddate)
set @count = @count - @tdaycount
end
return @count
end
此代码中是否需要优化以消除超时问题?怎么能做同样的事情?