3초기억력

설정된 몇초마다 프로시저 실행 본문

쿼리_MSSQL

설정된 몇초마다 프로시저 실행

잠수콩 2015. 5. 27. 13:19



제목 :  설정된 몇초마다 프로시저 실행


소스 :


-- create a table to store the results of some dummy procedure
create table Activity (
    InvokeTime datetime
not null default getdate()
   
, data float not null);
go 

-- create a dummy procedure
create procedure createSomeActivity
as
begin
   
insert into Activity (data) values (rand());
end
go

-- set up the queue for activation
create queue Timers;
create service Timers on queue Timers ([DEFAULT]);
go

-- the activated procedure
create procedure ActivatedTimers
as
begin
declare @mt sysname, @h uniqueidentifier;
begin transaction;
    receive
top (1)
       
@mt = message_type_name
       
, @h = conversation_handle
       
from Timers;

   
if @@rowcount = 0
   
begin
       
commit transaction;
       
return;
   
end

   
if @mt in (N'http://schemas.microsoft.com/SQL/ServiceBroker/Error'
       
, N'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog')
   
begin
       
end conversation @h;
   
end
   
else if @mt = N'http://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer'
   
begin
       
exec createSomeActivity;
       
-- set a new timer after 2s
       
begin conversation timer (@h) timeout = 2;
   
end
commit
end
go

-- attach the activated procedure to the queue
alter queue Timers with activation (
    status
= on
   
, max_queue_readers = 1
   
, execute as owner
   
, procedure_name = ActivatedTimers);
go 


-- seed a conversation to start activating every 2s
declare @h uniqueidentifier;
begin dialog conversation @h
   
from service [Timers]
   
to service N'Timers', N'current database'
   
with encryption = off;
begin conversation timer (@h) timeout = 1;

-- wait 15 seconds
waitfor delay '00:00:15';

-- end the conversation, will stop activating
end conversation @h;
go

-- check that the procedure executed
select * from Activity;


 


내용 :

 

queue 이해

wait for 이해



예제 소스 파일 :



Comments