异步 SQL 程序执行设置并等待完成
Asynchronous SQL procedure execution set and wait for completion
假设我对 运行 的过程进行了大量调用,这些过程具有不同的参数但是是独立的,所以我想进行 parallel/async 调用。我使用服务代理来触发所有这些,但我遇到的问题是我想知道知道如何等待它们全部完成(或错误)的巧妙方法。
有办法吗?我相信我可以循环等待结果 table 检查是否完成,但这不是很 "event triggered"。希望有更好的方法来做到这一点。
我使用了带有队列代码的服务代理,并根据其他答案进行处理:Remus' service broker queuing example
美好的一天,Shiv,
您可以使用多种方式(一如既往)来实现此要求。其中之一是使用此逻辑:
(1)创建两个队列:一个是异步执行你要执行的主SP的触发器,另一个是所有执行结束后执行你想执行的任何东西的触发器。
(2) 当你在第一个队列中创建消息时,你也应该在第二个队列中创建一条消息,它只会告诉我们哪个执行还没有结束(第一个队列给出了从一次开始执行的信息我们开始执行我们使用消息并将其从队列中删除)。
(3) 在使用主第一队列执行的 SP 内部(这部分同步执行):
(3.1) 执行你需要的查询
(3.2) 清除第二个队列中的等价消息(意味着这条消息只有在查询结束后才会被移除)
(3.3) 检查第二个队列中是否有消息。如果没有消息则所有任务结束,您可以执行最后一步
** 理论上,您可以将数据存储在 table 中,而不是使用第二个队列,但是使用第二个队列可能会提供比每次执行结束时更新 table 更好的性能。无论如何,您也测试使用 table 的选项。
假设我对 运行 的过程进行了大量调用,这些过程具有不同的参数但是是独立的,所以我想进行 parallel/async 调用。我使用服务代理来触发所有这些,但我遇到的问题是我想知道知道如何等待它们全部完成(或错误)的巧妙方法。
有办法吗?我相信我可以循环等待结果 table 检查是否完成,但这不是很 "event triggered"。希望有更好的方法来做到这一点。
我使用了带有队列代码的服务代理,并根据其他答案进行处理:Remus' service broker queuing example
美好的一天,Shiv,
您可以使用多种方式(一如既往)来实现此要求。其中之一是使用此逻辑:
(1)创建两个队列:一个是异步执行你要执行的主SP的触发器,另一个是所有执行结束后执行你想执行的任何东西的触发器。
(2) 当你在第一个队列中创建消息时,你也应该在第二个队列中创建一条消息,它只会告诉我们哪个执行还没有结束(第一个队列给出了从一次开始执行的信息我们开始执行我们使用消息并将其从队列中删除)。
(3) 在使用主第一队列执行的 SP 内部(这部分同步执行):
(3.1) 执行你需要的查询
(3.2) 清除第二个队列中的等价消息(意味着这条消息只有在查询结束后才会被移除)
(3.3) 检查第二个队列中是否有消息。如果没有消息则所有任务结束,您可以执行最后一步
** 理论上,您可以将数据存储在 table 中,而不是使用第二个队列,但是使用第二个队列可能会提供比每次执行结束时更新 table 更好的性能。无论如何,您也测试使用 table 的选项。