假设存储过程需要10分钟才能运行并且不返回任何数据。
在SQL Server中调用存储过程并让代码不等待结果的正确方法是什么?有没有办法从T-SQL或连接中处理它?在ADO.NET和经典ActiveX ADO中有效的东西吗?
我想到的唯一方法是:
1)在T-SQL中创建一个作业
2)将基于T-SQL的代码加载到作业的第一步中
3)确保代码的最后一行删除了作业
4)执行工作(我很确定这不会让你挂起来回复)
我知道这是非常糟糕和黑客......但是
是否还有其他一些T-SQL,我没想到你可以用一个存储过程来说“我知道没有回应......所以我选择不等待。”?
答案 0 :(得分:8)
是的,你可以
在Classic ADO中,使用选项 Connection的Open中的参数 方法:
oConnection.Open(,,, adAsyncConnect)
答案 1 :(得分:2)
对于.Net,请尝试.BeginExecuteNonQuery()
对象的SqlCommand
方法。但是不确定ActiveX ADO是如何工作的。
答案 2 :(得分:1)
除非进行更改或插入大量记录,否则我会调查重写任何花了那么长时间的SP。如果你的用户界面有超过30秒的sp,我会说你很有可能出现性能问题。有问题的过程是否有光标?如果你这样做,你可以通过适当的性能调整将其降低到毫秒。在进行解决方法之前,我会考虑进行性能调整,以使用户界面继续运行而不进行proc处理。
你说它没有返回任何记录,但如果失败,用户需要知道什么?如果他们继续做其他事情,他们会认为已经成功完成了。
答案 3 :(得分:0)
在一个单独的线程中运行它,让线程死掉。