2013-08-26 54 views
5

ストアドプロシージャを別のストアドプロシージャから非同期呼び出しする方法を教えてください。T-SQLでの非同期ストアドプロシージャコール

私は2つのストアドプロシージャSP1とSP2があると仮定します(これは長時間実行されるストアドプロシージャであり、実行に時間がかかり、結果を返しません)。

ストアドプロシージャSP1は、次のように定義されています

CREATE PROCEDURE SP1 
AS 
BEGIN 

    --custom business logic 

    --CALL to SP2, but async 

    EXEC SP2 

END 

どのようにして非ブロック/非同期呼び出しは、SQL Server 2012分の2008で上記のようにSPに作ることができますか?

+1

サービスブローカは、データエンジンに組み込まれた唯一の文レベルの非同期で通過パラメータを持つバージョンです。 BeyindにはSQLエージェントがありますが、このように使うのは難しいです。 – RBarryYoung

+0

[非同期プロシージャの実行](http://rusanu.com/2009/08/05/asynchronous-procedure-execution/) –

答えて

4

私は一度、これを達成するために、ストアドプロシージャをJobにラップしてから、sp_start_jobシステムspを使用してプロシージャ内でジョブを呼び出していました。

EXEC dbo.sp_start_job N'Job name' ; 
+0

引数がない限り動作します。 – RoastBeast

+1

あなたがシステム管理者であれば動作します。 –

0

BLOCKQUOTE
限り引数がないよう 作品。 - 17時30分

でRoastBeast 12月22日'15は、ここで

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

set @command = 'select * from table where data='[email protected] 

exec msdb..sp_add_job 
@job_name [email protected], 
@enabled=1, 
@start_step_id=1, 
@delete_level=1 --Job will delete itself after success 

exec msdb..sp_add_jobstep 
@[email protected], 
@step_id=1, 
@step_name='step1', 
@[email protected] 

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

exec msdb..sp_start_job 
@[email protected] 
関連する問題