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

केवल कुछ कॉलम अपडेट होने पर ट्रिगर निष्पादित करें (एसक्यूएल सर्वर)

SQL सर्वर में UPDATE() है फ़ंक्शन जिसे आप अपने DML ट्रिगर में उपयोग कर सकते हैं यह जांचने के लिए कि कोई विशिष्ट कॉलम अपडेट किया गया है या नहीं।

हालांकि यह फ़ंक्शन केवल एक कॉलम को स्वीकार करता है, आपको कई UPDATE() शामिल करने से रोकने के लिए कुछ भी नहीं है AND . के साथ क्लॉज या OR एकाधिक कॉलम अपडेट के परीक्षण के लिए।

उदाहरण

ये रही तालिका:

CREATE TABLE t1 (
    id int IDENTITY(1,1) NOT NULL,
    c1 int DEFAULT 0,
    c2 int DEFAULT 0,
    c3 int DEFAULT 0,
    c4 int DEFAULT 0
);

और ये रहा ट्रिगर:

CREATE TRIGGER trg_t1
ON t1
AFTER INSERT, UPDATE
AS
IF ( UPDATE(c1) OR UPDATE(c2) )
BEGIN
UPDATE t1
SET c4 = c4 + 1
WHERE id IN (SELECT DISTINCT id FROM inserted)
END;

इस मामले में, c4 कॉलम केवल तभी बढ़ेगा जब c1 या c2 कॉलम अपडेट किए गए। यह तब भी होगा जब उन दो कॉलमों में से केवल एक ही अपडेट किया गया हो (मेरे कारण OR . का उपयोग करना AND . के विपरीत )।

आइए अब c1 . में डेटा डालकर ट्रिगर का परीक्षण करें ।

INSERT INTO t1 (c1) 
VALUES (1);

SELECT * FROM t1;

परिणाम:

+------+------+------+------+------+
| id   | c1   | c2   | c3   | c4   |
|------+------+------+------+------|
| 1    | 1    | 0    | 0    | 1    |
+------+------+------+------+------+

जैसी उम्मीद थी, c4 c1 . के समय भी अपडेट किया गया था अपडेट किया गया था।

यह तब भी लागू होता है जब c2 अपडेट किया गया है।

UPDATE t1 
SET c2 = c2 + 1
WHERE id = 1;

SELECT * FROM t1;

परिणाम:

+------+------+------+------+------+
| id   | c1   | c2   | c3   | c4   |
|------+------+------+------+------|
| 1    | 1    | 1    | 0    | 2    |
+------+------+------+------+------+

और निश्चित रूप से, यह तब भी लागू होगा जब दोनों को अपडेट किया जाएगा।

हालांकि, यह नहीं अगर हम c3 update को अपडेट करते हैं तो लागू करें (लेकिन नहीं c1 या c2 )

UPDATE t1 
SET c3 = c3 + 1
WHERE id = 1;

SELECT * FROM t1;

परिणाम:

+------+------+------+------+------+
| id   | c1   | c2   | c3   | c4   |
|------+------+------+------+------|
| 1    | 1    | 1    | 1    | 2    |
+------+------+------+------+------+

दोनों स्तंभों को अपडेट करने की आवश्यकता है

हम OR को बदल सकते हैं करने के लिए AND यह निर्दिष्ट करने के लिए कि c4 कॉलम केवल तभी अपडेट होता है जब दोनों c1 और c2 अपडेट किया जा रहा है।

आइए इसे निर्दिष्ट करने के लिए अपना ट्रिगर बदलें:

ALTER TRIGGER trg_t1
ON t1
AFTER INSERT, UPDATE
AS
IF ( UPDATE(c1) AND UPDATE(c2) )
BEGIN
UPDATE t1
SET c4 = c4 + 1
WHERE id IN (SELECT DISTINCT id FROM inserted)
END;

अब अपडेट करें c1 केवल।

UPDATE t1 
SET c1 = c1 + 1
WHERE id = 1;

SELECT * FROM t1;

परिणाम:

+------+------+------+------+------+
| id   | c1   | c2   | c3   | c4   |
|------+------+------+------+------|
| 1    | 2    | 1    | 1    | 2    |
+------+------+------+------+------+

तो c1 निर्दिष्ट के अनुसार अद्यतन किया गया था, लेकिन c4 नहीं था।

अगर हम c2 . को अपडेट करते हैं तो भी ऐसा ही होगा लेकिन नहीं c1

लेकिन अब दोनों को अपडेट करते हैं c1 और c2

UPDATE t1 
SET c1 = c1 + 1, c2 = c2 + 1
WHERE id = 1;

SELECT * FROM t1;

परिणाम:

+------+------+------+------+------+
| id   | c1   | c2   | c3   | c4   |
|------+------+------+------+------|
| 1    | 3    | 2    | 1    | 3    |
+------+------+------+------+------+

जैसी उम्मीद थी, इस बार c4 भी अपडेट किया गया था।

विफल अपडेट

यह नोट करना महत्वपूर्ण है कि UPDATE() फ़ंक्शन केवल यह इंगित करता है कि क्या कोई INSERT . है या UPDATE प्रयास किसी तालिका या दृश्य के निर्दिष्ट स्तंभ पर बनाया गया था। यदि प्रयास असफल रहा तो भी यह सच हो जाएगा।

COLUMNS_UPDATED फ़ंक्शन

एकाधिक कॉलम में अपडेट की जांच करने का दूसरा तरीका COLUMNS_UPDATED . का उपयोग करना है समारोह।

यह फ़ंक्शन एक varbinary . देता है तालिका या दृश्य के सम्मिलित या अद्यतन किए गए स्तंभों को इंगित करने वाला बिट पैटर्न।

अधिक जानकारी के लिए, COLUMNS_UPDATED . के लिए Microsoft दस्तावेज़ देखें ।


  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 सर्वर क्वेरी कैश को कैसे साफ़ कर सकता हूँ?

  2. SQL सर्वर लेनदेन लॉग, भाग 1:लॉगिंग मूल बातें

  3. SQL सर्वर डेटाबेस में सक्षम / अक्षम चेक बाधाओं की सूची कैसे प्राप्त करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 86

  4. त्रुटि संदेश 4151 को ठीक करें "NULLIF के लिए पहले तर्क का प्रकार NULL स्थिरांक नहीं हो सकता क्योंकि SQL सर्वर में पहले तर्क के प्रकार को जानना होगा"

  5. SQL सर्वर लाइसेंसिंग लागत कम करें