我们有一个存储过程,其中有两个部分。在第1部分中,需要将失败返回给应用程序,并且必须在存储过程返回之前完全执行该部分。
第2部分是一个漫长的过程,需要在调用过程时执行,但所有失败都可以忽略(或在其他地方处理),但是我们希望应用程序在完成之前返回。所以我们需要一个这样做的程序:
exec PART1
return
exec PART2 -- still gets executed, but after sql server has already responded that the SP was a success to the client.
我认为我们可能会将其作为“工作线程”执行此操作,但我不知道在SQL服务器中执行此操作的任何语法。
有什么想法吗?我是在正确的轨道上吗?你知道完成这个的语法吗?我是否会忽略某种更简单的方法来实现这一目标?
答案 0 :(得分:2)
您可以在SQL Server中查看Implementing Jobs。
这个想法是有两个存储过程,其中一个由程序调用,其中一个由作业调用。第一个的最后一个动作是运行(或安排)工作。另请参阅Running Jobs
答案 1 :(得分:1)
从未听说过这在SQL中是可行的。它希望通过SP处理批处理。
尽管如此,we find this:
使用SQL Server Native时 客户端OLE DB提供者,应用程序 旨在初始化数据源 对象异步可以设置
DBPROPVAL_ASYNCH_INITIALIZE
位 之前的DBPROP_INIT_ASYNCH
财产 致电IDBInitialize::Initialize
。
这听起来像是在选择痛苦之路。如果您通过.NET调用存储过程并根据PART1
中设置的条件,您的应用程序将决定是否运行PART2
怎么办?
答案 2 :(得分:0)
您可以组合第一部分的存储过程和第二部分的触发器。
答案 3 :(得分:0)
有三种标准方法可以满足您的要求:
答案 4 :(得分:0)
有关如何在没有SQL代理调度程序参与的情况下执行此操作的示例,请参阅Asynchronous procedure execution。 SQL Agent有许多缺点:可扩展性,可靠性,故障转移方案,数据库备份/恢复一致性以及Express版本中的最低不可用性。链接中的解决方案通过利用Service Broker Activation机制克服了所有这些问题。