8

如何从另一个存储过程对存储过程进行异步调用?

假设我有两个存储过程,SP1 和 SP2(这是一个长时间运行的存储过程,需要很长时间才能执行,并且不返回任何结果)。

存储过程 SP1 的定义如下:

CREATE PROCEDURE SP1
AS
BEGIN

  --custom business logic

  --CALL to SP2, but async

  EXEC SP2

END

您如何在 SQL Server 2008/2012 中像上面那样对 SP 进行非阻塞/异步调用?

4

2 回答 2

4

有一次我试图通过将存储过程包装到Job中,然后通过sp_start_job system sp调用过程中的作业来实现这一点。

EXEC dbo.sp_start_job N'Job name' ;
于 2013-08-26T17:28:51.047 回答
2

Blockquote
只要没有参数就可以工作。– RoastBeast 2015 年 12 月 22 日 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
于 2016-03-03T11:45:45.723 回答