高手请进,为什么在执行了一个大的存储过程后,会停留很久......,散分......

xjpepitceo 2003-10-18 04:35:06
//是一个大的数据分析的存储过程。Delphi 代码
procedure TFAp.btnApClick(Sender: TObject);
begin
if messagedlg('是否要分析数据?',mtconfirmation,[mbyes,mbno],0)=mrno then
abort;
StartTime:=Now();
exespl.commandtext:='Exec Sp_TracesAnalyze :@UserName ,:@begdate ,:@enddate ,'+
' :@dept_no1 ,:@dept_no2 ,:@grp_no1 ,:@grp_no2 ,'+
' :@emp_no1 ,:@emp_no2 ,:Reap ';
exespl.Parameters.ParamByName('@UserName').value:=ttdm.UserID;
   //参数列表... ...
exespl.Parameters.ParamByName('@emp_no2').value:= EmpNo2;
exespl.Execute;//执行存储过程
showMessage('分 析 已 完 成 !, 共耗时 ' + FormatDatetime('hh:nn:ss:zzz', Now - StartTime));
end;
end;
// 后面没有执行代码。为什么执行后程序会停止,不是死了。过了几分钟到十几分钟后又能运行。但在执行大量数据时才会,少量时不会出现。后台执行存储过程也要前台资源吗?
...全文
64 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
garygan 2003-10-18
  • 打赏
  • 举报
回复
我认为这是正常的,在前台发送sql在后台执行!不管是不是返回结果,最终后返回一个执行的情况,包括是正确,还是出错了,出错后会返一个错误信息!
假如你的存储过程执行过长时间就会这样,犹如死机一样?其实后台是在进行.
你说在后用游标执行有1万行的临时表,这个是不是很好的做法,特别有多层嵌套的游标是更慢,及时有了索引也不会有很大的改善。
应该考虑重新该写一下存储过程,尽量使用一些有效率的复合的select 语句.
xjpepitceo 2003-10-18
  • 打赏
  • 举报
回复
我在Delphi中测试了很多次,结果都一样.不明白为什么前台会使用这么多资源.
xjpepitceo 2003-10-18
  • 打赏
  • 举报
回复
SQL Server 7.0 可以建临时表索引吗?
参数是一样的,因为都是在后台运行,速度是差不多的.
xjpepitceo 2003-10-18
  • 打赏
  • 举报
回复
SQL Server 7.0 可以建索引
yujohny 2003-10-18
  • 打赏
  • 举报
回复
你执行跟程序运行时候的输入参数值必须是一样的,你测试一下,看看存储过程运行了多久
xjpepitceo 2003-10-18
  • 打赏
  • 举报
回复
老大查询分析器运行没有问题,正常.程序是停在 showMessage('分 析 已 完 成 !, 共耗时 ' + FormatDatetime('hh:nn:ss:zzz', Now - StartTime)); 执行之后.
txlicenhe 2003-10-18
  • 打赏
  • 举报
回复
临时表也可以建索引。
create table #tmp (a char(2),b int)
create index indexname on #tmp (a)

xjpepitceo 2003-10-18
  • 打赏
  • 举报
回复
对了,上面的存储过程代码超过了一千五百多行。被迫用了1个可过万行的游标(引用的是临时表)。对了还有没有办法为游标提速。如临时表不用固定表会很不灵活。临时表又不能建索引。高手来指点.....
yujohny 2003-10-18
  • 打赏
  • 举报
回复
那是你的存储过程代码有问题,后者就是代码执行了很长时间,
你在查询分析器执行一下看看

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧