2013-08-26 15 views
5

Jak wykonać asynchroniczne wywołanie procedury składowanej z innego?Asynchronizacja procedury składowanej wywołanie w T-SQL

Załóżmy, że mam dwie procedury składowane, SP1 i SP2 (jest to długa procedura przechowywana, zajmuje dużo czasu, aby wykonać, i nie zwraca żadnego wyniku).

Procedura przechowywana SP1 jest zdefiniowany następująco:

CREATE PROCEDURE SP1 
AS 
BEGIN 

    --custom business logic 

    --CALL to SP2, but async 

    EXEC SP2 

END 

Jak można wykonać połączenie bez blokowania/asynchroniczny SP jak wyżej w SQL Server 2008/2012?

+1

Service Broker jest jedynym asynchrony oświadczenie poziomu zbudowany do silnika Danych. Beyind, że istnieje Agent SQL, ale jest to * bardzo * trudne do użycia w ten sposób. – RBarryYoung

+0

Zobacz [Asynchroniczne wykonanie procedury] (http://rusanu.com/2009/08/05/asynchronous-procedure-execution/) –

Odpowiedz

4

Kiedyś próbowałem to osiągnąć, zawijając procedurę przechowywaną w Job, a następnie wywołując zadanie w procedurze poprzez sp_start_job system sp.

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

Działa tak długo, jak nie ma żadnych argumentów. – RoastBeast

+1

Działa tak długo, jak długo jesteś sysadminem. –

0

Blockquote
Pracuje tak długo jak nie są żadne argumenty. - RoastBeast 22 grudnia '15 o 17:30

Oto wersja z parametrami przechodzącej

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] 
Powiązane problemy