शुरू, इस अन्य संग्रहीत प्रक्रिया भी लेन-देन में गिर जाता है?एक संग्रहीत प्रक्रिया निष्पादित अंदर/समाप्ति लेन-देन
मुझे नहीं पता था कि यह सी # में कोशिश/कैच की तरह काम करता है या नहीं।
शुरू, इस अन्य संग्रहीत प्रक्रिया भी लेन-देन में गिर जाता है?एक संग्रहीत प्रक्रिया निष्पादित अंदर/समाप्ति लेन-देन
मुझे नहीं पता था कि यह सी # में कोशिश/कैच की तरह काम करता है या नहीं।
हां, सब कुछ जो आप शुरुआती लेनदेन और कमिट (या रोलबैक) के बीच करते हैं लेनदेन का हिस्सा है।
मुझे एमएस एसक्यूएल सर्वर में विश्वास है कि संग्रहीत प्रक्रिया निष्पादन लेनदेन के भीतर होगा, लेकिन इसके साथ बहुत सावधान रहें। यदि आपके पास घोंसले हुए लेनदेन हैं (यानी, संग्रहीत प्रक्रिया के बाहर लेनदेन और संग्रहीत प्रक्रिया के अंदर एक अलग लेनदेन), तो रोलबैक सभी लेनदेन को प्रभावित करेगा, न केवल निकटतम संलग्न लेनदेन।
हां, सभी नेस्टेड संग्रहीत प्रक्रिया कॉल लेनदेन के दायरे में शामिल हैं। यदि आप SQL Server 2005 या अधिक का उपयोग कर रहे हैं, तो आप कोशिश कर सकते हैं ... कैच भी करें। Here उस पर अधिक जानकारी है।
बहुत अच्छा लगता है, धन्यवाद एक गुच्छा। मैं (क्योंकि मैं 05 पर हूँ)
BEGIN TRY
BEGIN TRANSACTION
DO SOMETHING
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
-- Raise an error with the details of the exception
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
यह काम करता है! धन्यवाद! Http://stackoverflow.com/questions/2715184/tsql-create-a-stored-proc-inside-a-transaction-statement में केएम द्वारा समाधान की तरह नहीं, जो नेटवर्क से संबंधित त्रुटि फेंकता है – knocte
कुछ इस तरह कर रही क्रिस उल्लेख किया है, आप लेन-देन वापस रोलिंग के बारे में सावधान रहना चाहिए समाप्त हो गया।
विशेष रूप से इस:
IF @@TRANCOUNT > 0 ROLLBACK
आप क्या चाहते हैं हमेशा नहीं है। आप इस
IF(@@TRANCOUNT = 1) ROLLBACK TRAN
ELSE IF(@@TRANCOUNT > 1) COMMIT TRAN
RETURN @error
की तरह कुछ कर सकता है इस तरह, बुला proc संग्रहीत प्रक्रिया से वापसी मान का निरीक्षण किया और निर्धारित करता है, तो यह वैसे भी प्रतिबद्ध या बुलबुला ऊपर त्रुटि के लिए जारी करना चाहता है कर सकते हैं।
कारण यह है कि 'COMMIT' आपके लेनदेन काउंटर को कम करेगा। एक बार जब यह लेनदेन काउंटर शून्य हो जाता है, तो एक वास्तविक प्रतिबद्धता होगी।
@ क्रिस, मुझे यह नहीं पता था।
अधिक जानकारी के लिए googling जब मैं this भर गया - आप 'savepoints' सेट कर सकते हैं, जिसे पूरे लेनदेन को वापस घुमाने के बिना वापस घुमाया जा सकता है।
इस स्थिति में उपयोगी हो सकता है।
Chris और James का उल्लेख है, आपको नेस्टेड लेनदेन से निपटने के दौरान सावधान रहना होगा। एक सेट SQL Server Centra एल पर Don Peterson द्वारा लिखित लेनदेन के विषय पर एक बहुत अच्छा लेख है, मैं उन लोगों में से एक पढ़ने होने की सिफारिश करेंगे:
यहाँ देखते हैं:
यह पूरी तरह से सच नहीं है।असल में, तालिका चर पर संचालन लेनदेन के दायरे से बाहर हैं; रोलबैक आपके टेबल वैरिएबल में किए गए किसी भी बदलाव को प्रभावित नहीं करता है। –
ठीक है, मेरा मतलब है कि आप डेटाबेस में * सबकुछ करते हैं * - मुझे लगता है कि मुझे लगता है कि यह स्पष्ट था कि वैरिएबल लेन-देन से प्रभावित नहीं होते हैं - हालांकि मुझे लगता है कि यह स्केलर चर के मुकाबले तालिका चर के साथ थोड़ा कम अंतर्ज्ञानी है। – Blorgbeard
क्या होगा यदि बाहरी ट्रांसलेशन कॉल के अंदर बुलाया गया स्पैम ट्रांज़ेक्शन करता है? आंतरिक लेनदेन वापस आने के बाद आंतरिक लेनदेन रोलबैक कहलाता है? – holaSenor