लेन-देन के साथ संयोजन में ट्रिगर


25

मान लें कि हमारे पास निम्नलिखित स्थिति है:

हमारे पास एक मेज है ( Table_Aमान लीजिए ), जिस पर एक ट्रिगर है INSERT। ट्रिगर कार्य table_Bमें डाले गए मूल्यों के आधार पर कुछ पंक्तियों को अद्यतन करना है table_A।

अब, सब कुछ ठीक है जब हम सरल तालिका में एक पंक्ति सम्मिलित करते हैं, लेकिन उन स्थितियों के बारे में क्या है जहां हम लेनदेन के माध्यम से डेटा डालते हैं? क्या ट्रिगर तब तक इंतजार करेगा जब तक कि सभी लेनदेन स्टेटमेंट सफलतापूर्वक न चलें, या यह उस क्षण को निकाल दिया जाएगा जब तक कि यह सम्मिलित नहीं हो जाता। यदि ट्रिगर पहली बार डालने पर तुरंत आग लग जाती है, तो अंतिम पंक्ति पर लेनदेन विफल होने पर क्या होगा? क्या उस स्थिति के लिए कुछ तंत्र है?

जवाबों:


37

एक प्रविष्टि हमेशा एक लेनदेन के भीतर होती है।

यदि आपके पास एक स्पष्ट नहीं है BEGIN TRAN ... COMMITया SET IMPLICIT_TRANSACTIONS ONफिर बयान एक स्व निहित ऑटो कमिट लेनदेन के रूप में चलता है ।

ट्रिगर हमेशा एक्शन के लिए लेनदेन का हिस्सा होता है जो ट्रिगर को फायर करता है। यदि ट्रिगर में कोई त्रुटि होती है जो लेन-देन रोलबैक का कारण बनती है, तो फायरिंग कार्रवाई भी वापस आ जाएगी।

ट्रिगर पर निहित है XACT_ABORT। इस सेटिंग के साथ एक त्रुटि स्वचालित रूप से लेन-देन रोलबैक को ले जाएगी ( RAISERRORकथन के साथ कोड में उठाए गए त्रुटियों को छोड़कर )।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.