SQL सर्वर में, आप CREATE TRIGGER
. का उपयोग कर सकते हैं ट्रिगर बनाने के लिए कथन।
ट्रिगर एक विशेष प्रकार की संग्रहीत प्रक्रिया है जो डेटाबेस सर्वर में कोई घटना होने पर स्वचालित रूप से चलती है।
आप एक डीएमएल ट्रिगर, एक डीडीएल ट्रिगर, या एक लॉगऑन ट्रिगर बना सकते हैं।
यह लेख DML ट्रिगर बनाने का एक उदाहरण प्रदान करता है।
DML ट्रिगर क्या है?
DML ट्रिगर एक ट्रिगर होता है जो तब चलता है जब कोई उपयोगकर्ता डेटा मैनिपुलेशन लैंग्वेज (DML) इवेंट के माध्यम से डेटा को संशोधित करने का प्रयास करता है।
DML इवेंट में INSERT
. शामिल हैं , UPDATE
, या DELETE
बयान। DML ट्रिगर का उपयोग व्यावसायिक नियमों और डेटा अखंडता को लागू करने, अन्य तालिकाओं को क्वेरी करने और जटिल T-SQL कथनों को शामिल करने के लिए किया जा सकता है।
ट्रिगर और इसे सक्रिय करने वाले कथन को एकल लेन-देन के रूप में माना जाता है, जिसे ट्रिगर के भीतर से वापस लाया जा सकता है।
उदाहरण
डीएमएल ट्रिगर कैसे काम करता है, यह दिखाने के लिए यहां एक उदाहरण दिया गया है।
CREATE TABLE t1 (
id int IDENTITY(1,1) NOT NULL,
c1 int DEFAULT 0,
c2 int DEFAULT 0,
c3 int DEFAULT 0
);
CREATE TRIGGER trg_t1
ON t1
AFTER INSERT, UPDATE
AS
UPDATE t1
SET c3 = c3 + 1
WHERE id IN (SELECT DISTINCT id FROM inserted);
इस उदाहरण में मैं एक टेबल बनाता हूं और मैं एक ट्रिगर भी बनाता हूं जिसे जब भी उस टेबल में कोई पंक्ति डाली या अपडेट की जाती है तो निकाल दिया जाएगा।
इस मामले में, ट्रिगर c3
. में 1 जोड़ देता है कॉलम जब भी डेटा डाला या अपडेट किया जाता है।
मैंने ट्रिगर को कॉल किया trg_t1
. मैंने उस भाग का अनुसरण ON t1
. के साथ किया , जिसका अर्थ है कि ट्रिगर t1
. नामक टेबल पर चलाया जाएगा .
आप वैकल्पिक रूप से ट्रिगर को चालू करने के लिए एक दृश्य निर्दिष्ट कर सकते हैं, हालांकि आप केवल एक दृश्य को INSTEAD OF
द्वारा संदर्भित कर सकते हैं ट्रिगर (इस मामले में, AFTER
बदलें) INSTEAD OF
. के साथ ) साथ ही, आप स्थानीय या वैश्विक अस्थायी तालिकाओं पर DML ट्रिगर को परिभाषित नहीं कर सकते।
AFTER
निर्दिष्ट करता है कि DML ट्रिगर केवल तभी सक्रिय होता है जब ट्रिगरिंग SQL कथन में निर्दिष्ट सभी ऑपरेशन सफलतापूर्वक लॉन्च हो गए हों। आप वैकल्पिक रूप से FOR
. निर्दिष्ट कर सकते हैं यहाँ।
एक अन्य विकल्प INSTEAD OF
का उपयोग करना है , जो बजाय trigger ट्रिगर चलाएगा ट्रिगरिंग SQL कथन का। इसलिए यह ट्रिगरिंग स्टेटमेंट की क्रियाओं को ओवरराइड करता है।
क्या है inserted
टेबल?
मेरे ट्रिगर में, मैं inserted
को क्वेरी करके यह पता लगाने में सक्षम हूं कि कौन सी पंक्ति अपडेट की गई थी टेबल।
SQL सर्वर inserted
नामक तालिका बनाता और प्रबंधित करता है , जो एक अस्थायी, स्मृति-निवासी तालिका है जो INSERT
के दौरान प्रभावित पंक्तियों की प्रतियां संग्रहीत करती है और UPDATE
बयान। इंसर्ट या अपडेट ट्रांजैक्शन के दौरान, inserted
. दोनों में नई पंक्तियां जोड़ी जाती हैं तालिका और ट्रिगर तालिका। सम्मिलित तालिका में पंक्तियाँ ट्रिगर तालिका में नई पंक्तियों की प्रतियाँ हैं।
SQL सर्वर डिलीट नामक एक समान तालिका भी बनाता है और रखता है, जो DELETE
के दौरान प्रभावित पंक्तियों की प्रतियों को संग्रहीत करता है और UPDATE
बयान। DELETE
. के निष्पादन के दौरान या UPDATE
कथन, पंक्तियों को ट्रिगर तालिका से हटा दिया जाता है और हटाए गए तालिका में स्थानांतरित कर दिया जाता है।
ट्रिगर चलाएँ
अब जबकि टेबल और उसका ट्रिगर बन गया है, आइए कुछ SQL स्टेटमेंट चलाते हैं जो इसे ट्रिगर करेंगे।
INSERT INTO t1 (c1)
VALUES (1);
SELECT * FROM t1;
परिणाम:
+------+------+------+------+ | id | c1 | c2 | c3 | |------+------+------+------| | 1 | 1 | 0 | 1 | +------+------+------+------+
तो हम देख सकते हैं कि ट्रिगर ने उम्मीद के मुताबिक काम किया। जब मैंने एक पंक्ति डाली, तो मैंने केवल c1
. के लिए एक मान निर्दिष्ट किया कॉलम, लेकिन ट्रिगर ने सुनिश्चित किया कि c3
कॉलम भी अपडेट किया गया।
ध्यान दें कि सभी स्तंभों के लिए डिफ़ॉल्ट मान 0
है (जैसा कि मैंने तालिका बनाते समय निर्दिष्ट किया था), और ट्रिगर ने उसमें 1 जोड़ा।
आइए एक UPDATE
एक ही कॉलम पर ऑपरेशन।
UPDATE t1
SET c1 = c1 + 1
WHERE id = 1;
SELECT * FROM t1;
परिणाम:
+------+------+------+------+ | id | c1 | c2 | c3 | |------+------+------+------| | 1 | 2 | 0 | 2 | +------+------+------+------+
एक बार फिर, c3
कॉलम को भी ट्रिगर द्वारा अपडेट किया गया था।
आइए अब c2
को अपडेट करें कॉलम।
UPDATE t1
SET c2 = c2 + 1
WHERE id = 1;
SELECT * FROM t1;
परिणाम:
+------+------+------+------+ | id | c1 | c2 | c3 | |------+------+------+------| | 1 | 2 | 1 | 3 | +------+------+------+------+
तो एक बार फिर, c3
कॉलम ट्रिगर द्वारा अपडेट किया जाता है।
जब भी इसी पंक्ति में कोई अन्य कॉलम अपडेट होता है तो यह विशेष ट्रिगर सक्रिय हो जाता है।
आप IF UPDATE(column_name)
. का भी उपयोग कर सकते हैं किसी एक कॉलम में अपडेट की जांच करने के लिए, या COLUMNS_UPDATED()
एकाधिक कॉलम में अपडेट की जांच करने के लिए।