Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

क्या मैं प्रत्येक n सेकंड में एक संग्रहित प्रो को कॉल करने के लिए SQL सर्वर प्राप्त कर सकता हूं?

एक टाइमर का उपयोग करें और सक्रियण . कोई बाहरी प्रक्रिया, क्लस्टरिंग या मिररिंग फ़ेलओवर के बाद भी काम करना जारी रखती है, एक अलग मशीन पर पुनर्स्थापित करने के बाद भी काम करना जारी रखती है, और यह एक्सप्रेस पर भी काम करती है।

-- 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में पैरेंट टेबल, संदर्भ तालिका, विदेशी कुंजी बाधा नाम और कॉलम कैसे प्राप्त करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 71

  2. SQL सर्वर में डेटा प्रकार वरीयता

  3. व्यू कॉलम कैसे बनाएं नॉट न्यूल

  4. SQL सर्वर में एक कॉलम में गैर-संख्यात्मक मान खोजें

  5. R . में SQL सर्वर संग्रहीत कार्यविधि से लौटाए गए एकाधिक परिणाम सेट को कैसे पढ़ें?