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

SQL सर्वर में DML ट्रिगर बनाएं

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() एकाधिक कॉलम में अपडेट की जांच करने के लिए।


  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 सर्वर ऑपरेटिंग सिस्टम त्रुटि 5:5 (प्रवेश निषेध है।)

  2. SQL सर्वर 2005 में किसी तालिका में एकाधिक कॉलम का योग कैसे प्राप्त करें?

  3. SQL सर्वर में क्वेरी ऑप्टिमाइज़ेशन तकनीक:क्वेरी प्रदर्शन को बढ़ावा देने के लिए 5 सर्वोत्तम अभ्यास

  4. SQL सर्वर में DML ट्रिगर बनाएं

  5. टी-एसक्यूएल के साथ एमडी 5 हैश स्ट्रिंग जेनरेट करें