今天客户反馈到这样一个问题,同样一个页面不同的用户进入,有些用户不会出错,有些用户则显示:

SQL错误:超时时间已到。在操作完成之前超时时间已过或服务器未响应。这样的错误。

      于是我查了一下数据库,发现凡是出错的用户都具有相同的一个特点:就是数据量较大。

再查询程序,原来SQL语句:用了function,function 里还用了游标。

select *,dbo.F_AcceptUnit as Unit  from Iw_SendInfo

Create function F_AcceptUnit(@sID int ,@UID int)
returns varchar(4000)
as
begin
declare @UnitName varchar(1000),@Unit varchar(4000)
set @Unit=''
DECLARE Dname_Cursor CURSOR FOR
select Dname from IwUser where ID in (select userid from inceptinfo where sid=@sID and  userid!=@UID)
open Dname_Cursor
FETCH NEXT FROM Dname_Cursor
INTO @UnitName
WHILE @@FETCH_STATUS = 0
BEGIN

FETCH NEXT FROM Dname_Cursor
INTO @UnitName
 set  @Unit =@Unit+ @UnitName +','
end
CLOSE Dname_Cursor
DEALLOCATE Dname_Cursor
return @Unit
end

 SQL2000里面本来游标的性能就比较低下,然后SQL里面再查询function,无疑是雪上加霜。游标还是慎用为好啊!

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-31
  • 2021-08-02
  • 2021-07-25
  • 2021-12-02
  • 2021-07-23
猜你喜欢
  • 2022-02-10
  • 2022-12-23
  • 2021-11-29
  • 2021-06-28
  • 2021-11-26
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案