2010-08-07 11 views
5

मैं प्रक्रिया को इस तरह से कैसे लिख सकता हूं ताकि जब भी किसी भी कथन में कोई त्रुटि हो, तो मैं सभी इंसर्ट, अद्यतन और हटाएं कथन कर सकता हूं।पूरी प्रक्रिया को वापस रोल करना (सभी कथन)

कृपया ध्यान दें कि मेरी प्रक्रिया में अनुक्रम में सूचीबद्ध विवरण हो सकते हैं और शायद नहीं। दूसरे शब्दों में, मेरे पास एक आईएनएसईआरटी कथन है, फिर कुछ IF तर्क, फिर एक और आईएनएसईआरटी, फिर एक अद्यतन, तर्क के बाद, हटाएं कथन, आदि

मैं बस सभी INSERT को रोल करना चाहता हूं, यदि किसी भी कथन के लिए त्रुटि हुई तो अद्यतन और हटाएं बयान। मुझे यह कोड http://msdn.microsoft.com/en-us/library/ms181299.aspx और http://en.allexperts.com/q/MS-SQL-Server-1801/Rollback-SP.htm

लेकिन वे मेरे प्रश्न का उत्तर नहीं देते हैं।

उत्तर

4

यदि लेनदेन XACT_ABORT विकल्प के साथ चल रहा है तो यह स्वचालित रूप से हो जाएगा।

set xact_abort on 
begin tran 

/*Your code*/ 


commit 

यहाँ काफी एक interesting question बनाम संरचित त्रुटि हैंडलिंग इस का उपयोग कर के बारे में चर्चा है।

2

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

मार्टिन स्मिथ का answer with xact_abort is desribed in more detail here

2

जो आप वर्णन कर रहे हैं उसे "डेटाबेस लेनदेन प्रसंस्करण" कहा जाता है। यह एक ऐसा निर्माण बनाता है जो आपके डीबी को डेटा लिखने के संदर्भ में "सब कुछ या कुछ नहीं" है।

यह एक लॉजिकल फ्रेम बनाता है जहां आपकी सभी टेबल एक साथ अपडेट की जाती हैं, लेकिन यदि एक तालिका अपडेट नहीं हो सकती है तो पूरा लेनदेन पिछले राज्य में वापस ले जाया जाता है।

अधिकांश डीबी इस तरह से करते हैं। छद्म कोड निम्नानुसार है।

 
Begin transaction 
    Update Table One 
    Update table Two 
    [Update lots of tables] 
    if all updates successfull 
     commit (All changes to all tables) 
    else 
     rollback (All changes) 
End transaction 

ध्यान दें कि शब्द "लेन-देन", "प्रतिबद्ध" और "रोलबैक" आम तौर पर तकनीकी रूप में अच्छी तरह सबसे डीबी के द्वारा प्रयुक्त पद हैं।

लिंक जो मुझे इससे बेहतर समझा सकता है। http://www.subbu.org/articles/nuts-and-bolts-of-transaction-processing

अपने डीबी के दस्तावेज़ों को देखें और आपको इन सबके संदर्भ मिलना चाहिए।

एचटीएच, यदि टिप्पणी नहीं है और मैं फिर कोशिश करूंगा। :-)

संबंधित मुद्दे