T-SQL中的异步存储过程调用

10
如何从一个存储过程异步调用另一个存储过程?
假设我有两个存储过程SP1和SP2(这是一个长时间运行的存储过程,执行需要很长时间,并且不返回任何结果)。
存储过程SP1的定义如下:
CREATE PROCEDURE SP1
AS
BEGIN

  --custom business logic

  --CALL to SP2, but async

  EXEC SP2

END

如何在SQL Server 2008/2012中进行非阻塞/异步调用SP?


1
Service Broker是嵌入到数据引擎中的唯一的语句级异步处理。除此之外,还有SQL Agent,但是像这样使用非常困难。 - RBarryYoung
请参阅异步过程执行 - Bogdan Sahlean
2个回答

5

曾经我试图通过将存储过程封装成作业(Job),然后通过sp_start_job系统存储过程调用该作业。

EXEC dbo.sp_start_job N'Job name' ;

只要没有参数,这个程序就可以工作。 - RoastBeast
2
只要您是系统管理员,这个工作就能正常运行。 - Ian Boyd

3

块引用
只要没有参数,它就可以工作。- RoastBeast Dec 22 '15 at 17:30

这是带有传递参数的版本

  declare @variable -- job name
declare @command -- command

set @command = 'select * from table where data='+@variable

exec msdb..sp_add_job
@job_name =@variable,
@enabled=1,
@start_step_id=1,
@delete_level=1 --Job will delete itself after success

exec msdb..sp_add_jobstep
@job_name=@variable,
@step_id=1,
@step_name='step1',
@command=@command

exec msdb..sp_add_jobserver
@job_name = @variable,
@server_name = 'yourserver'

exec msdb..sp_start_job
@job_name=@variable

非常惊人。我完全要从中制作一个存储过程,以便在不需要整夜保持 SSMS 打开的情况下运行长查询。作业名称来自新的随机 GUID。 - memtha
RoastBeast所指的并非完全相同。SQL代理管理参数与正在执行的存储过程的参数并不相同。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接