原问题连接:
http://community.csdn.net/Expert/topic/3235/3235760.xml?temp=.7710382用的是TADOConnection,TADOQuery控件,数据库是SQL Server 2000
执行的存储过程大概如此:
BEGIN
  SELECT A.FIELD1,A.FIELD2,B.FIELD2,C.FIELD2
  INTO DB1.dbo.TABLE0
  FROM DB2.dbo.TABLE1 A
  LEFT JOIN DB2.dbo.TABLE2 B
  ON A.FIELD1=B.FIELD1
  LEFT JOIN DB2.dbo.TABLE3 C
  ON A.FIELD1=C.FIELD1
END
当数据量较大时,执行时间就很长,所以需要有中止功能。就是在主程序界面中设置一中止执行按钮,用户点击它,就中止存储过程的执行。
请教各路前辈高手们如何实现...

解决方案 »

  1.   

    你可以加两个EDIT,内填写想取出记录范围!
    数据库排序!!!!!
      

  2.   

    谢谢 boatzm(晓舟)【塑料的玫瑰花】(*****) 的加分提示,那现在我要加分只能象现在一样多发几个主题了。并特别感谢 GoldShield(金盾) 朋友,一直在关注和参与讨论我的这个问题,非常感谢!yuyupluck(莫笑我提得笨) 的提法应该是想办法优化,尽量提高效率,而不是中止执行。现在我的实际情况是源数据库是第三方数据库,我不好控制。另外,数据量总我超大时,用户不想等待的时候,就必须要求主动中止执行。做数据库的朋友,难道都没有遇到这种情况吗?或者有另外的做法?
      

  3.   

    试了一下这个好像可以:
      在你的TABLE0表,也就是你要插入的那个表上定义一个触发器:
    CREATE TRIGGER [Tnn] ON [dbo].[TABLE0] 
    FOR INSERT
    AS
    select * From zz
    再在你的数据库中建立一个ZZ表,里边一个字段一条记录就行了,不然又会浪费时间.当你在程序中按取消按钮时,写一条Rename语句,把ZZ表改个名.这样你的存储过程在插入时由于触发器失败,存储过程也就中止了.(在SQL中试了一下,可以.但没在DELPHI下写完整代码试验.)
      

  4.   

    更改query的属性关闭query和数据表的连接这样可以达到终止查询继续进行的作用
      

  5.   

    试试 Dragon_CB(在痛苦和快乐的边缘) 的办法,谢谢
      

  6.   

    这个想法很奇特,我试过,把application强行kill掉,存储过程就不执行了。
    根据这个现象,你把adoquery free掉应该可以(我没有试过,现在没有sql server环境)
      

  7.   

    复 lionlsl(林):
     不知你有什么好办法,说来听听,我真不知如何解决。复 lw549(那个孩子他爹):
     也许kill掉可以,我也没试过,我想kill掉整个程序的连接应该都断开,不知是不是,你试的结果如何?但如果把ADOQuery Free掉,应该程序会出错的。复 capoatguitar(达达):
     我也不知能不能,但有时候存储过程执行太长时间需要人工中断不知怎么办?难道就让它永远死机下去?我仍在等高手们的指点...
      

  8.   

    你可以去SQL区
    那的大斑竹很厉害,也乐于助人
      

  9.   

    --试试,在中断的程序中,执行如下的SQL语句declare @s nvarchar(100);set @s='kill '+cast(@@spid as varchar);exec(@s)