执行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脚本)/阻塞数据直到数据都完成

MS SQL执行大脚本文件时,提示“未能完成操作,存储空间不足,无法处理此命令”的解决办法

进入PLSQL的命令窗口,输入SQL语句后,应该如何执行?

kettle的阻塞数据阻塞数据直到完成执行SQL脚本

SQL Server 输出消息

SQL Server自动化运维系列——批量执行SQL脚本(Power Shell)