अन्य कुछ के लिए देख रहा हूँ एक SQL एजेंट काम नियमित रूप से चलने और एक मेज से प्रक्रिया मापदंडों संग्रहीत खींचती है , इसलिए एसक्यूएल एजेंट नौकरी केवल उन पंक्तियों को उठाएगी जो देय/थोड़ी अतिदेय हैं। संग्रहीत प्रक्रिया को कॉल करने के बाद इसे पंक्तियों को हटा देना चाहिए या उन्हें चिह्नित करना चाहिए।
फिर, ट्रिगर में, बस उसी तालिका में एक नई पंक्ति डालें।
आप किसी ट्रिगर में कुछ भी डालना नहीं चाहते हैं जो किसी भी तरह से मूल लेनदेन के निष्पादन को प्रभावित करेगा - आप निश्चित रूप से किसी भी देरी का कारण नहीं बनना चाहते हैं, या इसके बाहर किसी भी चीज़ से बातचीत नहीं करना चाहते हैं डेटाबेस।
जैसे, अगर संग्रहीत प्रक्रिया
CREATE PROCEDURE DoMagic
@Name varchar(20),
@Thing int
AS
...
फिर हम एक तालिका बनाने होता है:
CREATE TABLE MagicDue (
MagicID int IDENTITY(1,1) not null, --May not be needed if other columns uniquely identify
Name varchar(20) not null,
Thing int not null,
DoMagicAt datetime not null
)
और एसक्यूएल एजेंट काम करना होगा:
WHILE EXISTS(SELECT * from MagicDue where DoMagicAt < CURRENT_TIMESTAMP)
BEGIN
DECLARE @Name varchar(20)
DECLARE @Thing int
DECLARE @MagicID int
SELECT TOP 1 @Name = Name,@Thing = Thing,@MagicID = MagicID from MagicDue where DoMagicAt < CURRENT_TIMESTAMP
EXEC DoMagic @Name,@Thing
DELETE FROM MagicDue where MagicID = @MagicID
END
और ट्रिगर में बस होगा:
CREATE TRIGGER Xyz ON TabY after insert
AS
/*Do stuff, maybe calculate some values, or just a direct insert?*/
insert into MagicDue (Name,Thing,DoMagicAt)
select YName,YThing+1,DATEADD(minute,30,CURRENT_TIMESTAMP) from inserted
आप एक संस्करण है कि एजेंट का समर्थन नहीं करता में चला रहे हैं, तो आप इसके नकली हो सकता है। क्या मैं पूर्व में की गई एक संग्रहीत प्रक्रिया है कि "गरीब मनुष्य एजेंट नौकरियों" शामिल है, की तरह कुछ बनाने के लिए है:
CREATE PROCEDURE DoBackgroundTask
AS
WHILE 1=1
BEGIN
/* Add whatever SQL you would have put in an agent job here */
WAITFOR DELAY '00:05:00'
END
फिर master
डेटाबेस में इस समय, एक दूसरे संग्रहीत प्रक्रिया बनाने के लिए, है, जो 30 सेकंड इंतजार कर रहा है और फिर पहली प्रक्रिया कॉल:
CREATE PROCEDURE BootstrapBackgroundTask
AS
WAITFOR DELAY '00:00:30'
EXEC YourDB..DoBackgroundTask
और फिर, एक स्टार्टअप प्रक्रिया के रूप में इस प्रक्रिया को चिह्नित करते हैं, sp_procoption
का उपयोग कर:
EXEC sp_procoption N'BootstrapBackgroundTask', 'startup', 'on'
और सेवा को पुनरारंभ करें - अब आपके पास लगातार चल रही क्वेरी होगी।
क्षमा करें अगर एसक्यूएल-एक्सप्रेस टैग जोड़ना भूल जाते हैं। –
@ मोहम्मद रबी - आपके टैगिंग के साथ कुछ गड़बड़ है - कोई SQL Server 2000 एक्सप्रेस नहीं है। एमएसडीई था, लेकिन पहला एक्सप्रेस संस्करण 2005 था। क्या आप कृपया सही कर सकते हैं? –
मैं चाहता हूं कि यह एसक्यूएल-सर्वर 2000 और एसक्यूएल-सर्वर 2008 एक्सप्रेस –