sql-server – 可以让SQL Server每n秒钟调用一个存储过程吗?

前端之家收集整理的这篇文章主要介绍了sql-server – 可以让SQL Server每n秒钟调用一个存储过程吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望有一个每n秒调用一个存储过程,有没有办法在sql Server中执行,而不依赖于单独的进程?

解决方法

使用 timeractivation.在集群或镜像故障切换后,外部进程继续工作,即使在不同机器上还原后仍能继续运行,而且它也适用于Express.
-- 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;
原文链接:/mssql/81333.html

猜你在找的MsSQL相关文章