FOR और AFTER ट्रिगर्स के बीच अंतर?


120

FORऔर AFTERट्रिगर के बीच क्या अंतर है?


5
+1: मैंने ट्रिगर पर SQL सर्वर बुक्स ऑनलाइन लेख पढ़ा और ठीक उसी प्रश्न के साथ समाप्त हुआ
pfunk

मुझे यह लेख उपयोगी लगा: dotnettricks.com/learn/sqlserver/…
मैट

जवाबों:


153

कोई फर्क नहीं है, वे एक ही काम करते हैं।

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

के समान है

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

एक INSTEAD OFट्रिगर अलग है, और डालने से पहले और उसके बजाय आग लग जाती है और इसे अंतर्निहित तालिकाओं में उपयुक्त मान डालने के लिए, विचारों पर उपयोग किया जा सकता है।


14
मुझे ट्रिगर्स का उपयोग करके दृश्यों में आवेषण के बारे में टिप्पणी पसंद आई। बहुत उपयोगी जानकारी। चीयर्स।
मेरिज

बहाना मिस्टर @, क्या दृश्य में सम्मिलित करने के लिए परिदृश्य होगा ? धन्यवाद ^ - ^
जीनकार्लो फान्टाल्वो

@JeancarloFontalvo, 1) संगतता। अंतर्निहित तालिकाएँ बदल सकती हैं बशर्ते कि दृश्य समान रहे। 2) अभिगम नियंत्रण, कुछ उपयोगकर्ताओं को केवल कुछ कॉलमों को लिखने की अनुमति हो सकती है।
बेन

17

@ बिलकुल सही है।

यहाँ MSDN आलेख SQL सर्वर ट्रिगर की खोज है

लेख से एक पैराग्राफ:

यह वाक्यविन्यास SQL ​​सर्वर के पुराने संस्करणों में भी स्वीकार्य है। हालाँकि, अब जब SQL Server 2000 में दो प्रकार के ट्रिगर्स हैं, तो मैं AF ट्रिगर्स के रूप में फॉर ट्रिगर्स को संदर्भित करना पसंद करता हूं। इस प्रकार, इस लेख के शेष भाग के लिए मैं या तो AFTER या INSTEAD ऑफ ट्रिगर्स का उल्लेख करूंगा।

पहले देखे गए AFTER ट्रिगर की तरह, यह ट्रिगर अंतिमनाम फ़ील्ड में किए जा रहे परिवर्तनों को रोकता है। हालांकि, यह इस व्यापार नियम को पिछले उदाहरण की तुलना में अलग तरीके से लागू करता है। क्योंकि ट्रिगर का INSTEAD UPDATE स्टेटमेंट के स्थान पर आग लगाता है, ट्रिगर का INSTEAD तब मूल्यांकन करता है कि व्यापार नियम परीक्षण पास करता है या नहीं। यदि व्यापार नियम परीक्षण पास होता है, तो अद्यतन के ट्रिगर के क्रम में स्पष्ट रूप से अद्यतन कथन को फिर से लागू करना होगा।


4

AFTER निर्दिष्ट करता है कि DML ट्रिगर को तभी निकाल दिया जाता है जब ट्रिगर SQL कथन में निर्दिष्ट सभी ऑपरेशन सफलतापूर्वक निष्पादित हो गए हों। इस ट्रिगर आग से पहले सभी संदर्भात्मक कैस्केड क्रियाएं और बाधा जांच भी सफल होनी चाहिए। जब केवल कीवर्ड निर्दिष्ट किया जाता है तो AFTER डिफ़ॉल्ट होता है।

बाद के ट्रिगर्स को विचारों पर परिभाषित नहीं किया जा सकता है।

INSTEAD OF निर्दिष्ट करता है कि DML ट्रिगर को SQL कथन को ट्रिगर करने के बजाय निष्पादित किया जाता है, इसलिए, ट्रिगर करने वाले कथनों के कार्यों को ओवरराइड करता है। डीडीएल या लॉगऑन ट्रिगर्स के लिए INSTEAD निर्दिष्ट नहीं किया जा सकता है।

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql


1
यह वाक्यांश "AFTER डिफ़ॉल्ट है जब FOR केवल निर्दिष्ट कीवर्ड है।" बहुत भ्रामक है। वे इसे बेहतर तरीके से बोल सकते थे।
FMFF
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.