我在D中运行一个SQL存储过程,因其数据量较大,生成2W行以上的记录,运行几分钟后,就结束了,但只产生了500多条记录。
当我在查询分析器中运行时,产生的结果是2W以上的记录,结果正确,历时50分钟左右请问这是什么原因,会是D中有什么运行时间限制吗?在D中的代码是:
  myDM.ADOStoredProc1.ProcedureName:='UP_GetResidueToTable';
  myDM.ADOStoredProc1.ExecProc;在查询分析器中的代码是:
EXEC UP_GetResidueToTable 存储过程代码:
CREATE procedure up_CreateFgAndItemTable
as delete from ut_FgAndItem
declare @FgAndItem cursor
,@item ItemTypeIF OBJECT_ID('tempdb..@tmpOneFgItem') IS NULL BEGIN
   CREATE TABLE #tmpOneFgItem (
         seq int
         ,TcLevel int
         ,TcItem nvarchar(30)
         ,TcGroupItem nvarchar(30)
         ,TcDesc nvarchar(40)
         ,TQty float
         ,TUm nvarchar(3)
         ,TUnit nvarchar(1)
         ,TRef nvarchar(1)
         ,TType nvarchar(1)
         ,TcPmtCode nvarchar(1)
         ,TcStocked tinyint
         ,TcRevision nvarchar(8)
         ,TcJobRefDes nvarchar(10)
         ,TcJobRefBubble nvarchar(4)
         ,TcJobRefAssySeq nvarchar(4)
         ,rowpointer uniqueidentifier
         ,QtyPerFormat nvarchar(30)
         ,PlacesQtyPer tinyint
         ,AltGroup int  
         ,AltGroupRank int 
            ,Uf_SubMaterial nvarchar(1)
            ,uf_ECNEngQty decimal(9)
      )
ENDset @FgAndItem=cursor local static for 
select item from item where item like 'FG%'
open @FgAndItem
while 1=1 
begin
  fetch @FgAndItem into
     @item
  if @@fetch_status<>0 
     break
  insert into #tmpOneFgItem exec UP_Rpt_IndentedCurrentBillofMaterialSp @item,@item
  insert into ut_FgAndItem(FgItem,TcLevel,TcItem,TUm,TQty) select TcGroupItem,TcLevel,TcItem,TUm,TQty from #tmpOneFgItem
  delete from #tmpOneFgItem
end
drop table #tmpOneFgItem
GO上面UP_Rpt_IndentedCurrentBillofMaterialSp存储过程主要负责从那个10W的函数中取对应值
其实用一个查询可以代替的,可不知道是数据太多的原因还是什么,这查询在存储过程通不过  请高手帮忙!

解决方案 »

  1.   

    是ERP的数据,原来的数据更大,10W的都有。如何取消其超时。
      

  2.   

    可以考虑一下分页了
    再说了,一次返回2W条数据也是不现实的,用户不可能一次看完是吧,可以考虑,每次看100条,这样速度还快,set @FgAndItem=cursor local static for
    select item from item where item like 'FG%' 只要在这里加上就可以了,另外,你设计的表是不合格的,
    select item from item 从这里就可以看出来!
      

  3.   

    至于mssql如何分页,自己去找找吧,很多的,
      

  4.   

    是ERP的数据,原来的数据更大,10W的都有。如何取消其超时。10W是小CASE,我维护的ERP里面光表就有10K,这还不算视图,包之类的!
      

  5.   

    TO:lwk_hlj(阿凯(学习oralce中)) 
    1)
    分页:set @FgAndItem=cursor local static for
          select item from item where item like 'FG%' 
    要如何写,能否举例
    2)你设计的表是不合格的,
    这表有什么设计问题,是ERP里的。
    其实因为记录太多(超过10W)读取太慢,才用了中间表,定时把数据临时保存到一个表中,然后再从中间表中取得相应的数据
      

  6.   

    mssql不会,
    http://blog.csdn.net/zjcxc/archive/2003/12/29/20080.aspx
    这里有个表名和字段名一样!
      

  7.   

    谢lwk_hlj(阿凯(学习oralce中)) 在D中有过程超时的属性,时间加长即可。