执行sql脚本,不等待完成
Posted
技术标签:
【中文标题】执行sql脚本,不等待完成【英文标题】:Execute sql script and not wait for completion 【发布时间】:2010-08-26 16:59:03 【问题描述】:我有一个运行大约 3 分钟的 sql 存储过程,我希望从 asp.net 执行这个存储过程,但我知道如果我这样做,那个 asp.net 很可能会超时。
我正在考虑在 sql 中创建一个作业以让它执行该存储过程,并让 asp.net 调用一个存储过程来调用该作业。 我有一个在存储过程开始和结束时更新的表。
我的应用程序将使用它来确定脚本何时完成,但是,我想知道是否有另一种方法来运行存储过程,而不是让它等待它完成来推送响应。
我只是想知道是否有更有效的方法来做到这一点,或者我是否应该坚持为需要永远运行的脚本创建作业。
【问题讨论】:
我以前使用过工作方法,但我认为这里接受的答案可能更好......Asynchronous Storec Proc without waiting for completion.的可能重复 【参考方案1】:查看这篇文章:Asynchronous procedure execution。这些文章提供了代码示例,并解释了为什么利用内部 activation 比依赖 SQL 代理作业更好。像这样运行的过程是可靠的(与 ADO.NEt async BeginExecuteXXX 不同,即使客户端断开连接也能保证执行)并且即使在 SQL Server 重新启动之后,甚至在灾难恢复服务器重建之后也会执行。
【讨论】:
我也在看这篇文章,这似乎解决了我的问题。感谢您的快速回复。 我正在使用 oracle 和 Oracle 客户端,我不能使用异步过程执行!所以 ??在 sql 中创建一个作业以让它执行该存储过程将是最好的方法? @frank 如果您有任何问题,请单独提问。 我做了...***.com/questions/16737525/…【参考方案2】:听起来像这样是使用Service Broker 的不错选择。
【讨论】:
【参考方案3】:如果你不关心结果,你可以使用SqlCommand.BeginExecuteNonQuery()
方法。这将在后台线程上触发命令。有关MSDN 的更多信息。
【讨论】:
对于这种情况,我无法使用 BeginExecuteNonQuery,因为我没有使用 SqlCommand 来执行我的存储过程,我使用 DataSet 模板来管理我的 sql 脚本,这也使得使用起来更容易.不过谢谢!以上是关于执行sql脚本,不等待完成的主要内容,如果未能解决你的问题,请参考以下文章
ETL-kettle-阻塞数据(执行sql脚本)/阻塞数据直到数据都完成