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

SQL सर्वर - ट्रिगर डालने के बाद - उसी तालिका में एक और कॉलम अपडेट करें

यह वर्तमान में डीबी पर सेट ट्रिगर के लिए रिकर्सन स्तर पर निर्भर करता है।

अगर आप ऐसा करते हैं:

SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO

या यह:

ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF

ऊपर दिए गए उस ट्रिगर को दोबारा नहीं बुलाया जाएगा, और आप सुरक्षित रहेंगे (जब तक कि आप किसी तरह के गतिरोध में नहीं पड़ जाते; यह संभव हो सकता है लेकिन शायद मैं गलत हूं)।

फिर भी, मैं नहीं सोचो यह एक अच्छा विचार है। एक बेहतर विकल्प INSTEAD OF ट्रिगर का उपयोग करना होगा . इस तरह आप डीबी पर पहले (मैनुअल) अपडेट को निष्पादित करने से बचेंगे। केवल ट्रिगर के अंदर परिभाषित एक ही क्रियान्वित किया जाएगा।

INSERT के बजाय ट्रिगर इस प्रकार होगा:

CREATE TRIGGER setDescToUpper ON part_numbers
INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO part_numbers (
        colA,
        colB,
        part_description
    ) SELECT
        colA,
        colB,
        UPPER(part_description)
    ) FROM
        INSERTED
END
GO

यह part_description पर एक स्पष्ट UPPER कॉल के साथ मूल INSERT कथन को स्वचालित रूप से "प्रतिस्थापित" करेगा। फ़ील्ड.

अद्यतन के बजाय एक ट्रिगर समान होगा (और मैं आपको एक भी ट्रिगर बनाने की सलाह नहीं देता, उन्हें अलग रखें)।

साथ ही, यह @Martin टिप्पणी को संबोधित करता है:यह मल्टीरो इंसर्ट/अपडेट के लिए काम करता है (आपका उदाहरण नहीं है)।



  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 सर्वर 2008 और 2008 R2 के लिए समर्थन की समाप्ति

  2. तालिका के सेट पर सीडीसी को कैसे सक्षम करें या SQL सर्वर में डेटाबेस में सभी तालिकाओं पर सक्षम करें - SQL सर्वर ट्यूटोरियल

  3. 2 कॉलम का उपयोग करके तालिका विभाजन

  4. SQL सर्वर - सभी गैर-मुद्रण योग्य ASCII वर्णों को हटा दें

  5. समेकन के योग के बराबर स्ट्रिंग