लेन-देन तभी खोलें जब आप TRY
. के अंदर हों ब्लॉक करें और वास्तविक स्टेटमेंट से ठीक पहले, और इसे सीधे करें। अपने लेन-देन करने के लिए बैच के अंत तक अपने नियंत्रण के जाने की प्रतीक्षा न करें।
अगर आपके TRY
. में रहते हुए कुछ गलत हो जाता है ब्लॉक करें और आपने एक लेन-देन खोला है, तो नियंत्रण CATCH
. पर कूद जाएगा खंड मैथा। बस अपने लेन-देन को वहां रोलबैक करें और आवश्यकतानुसार अन्य त्रुटि प्रबंधन करें।
मैंने @@TRANCOUNT
. का उपयोग करके किसी भी खुले लेनदेन के लिए एक छोटा सा चेक जोड़ा है वास्तव में लेनदेन को वापस लाने से पहले कार्य करें। इस परिदृश्य में यह वास्तव में ज्यादा समझ में नहीं आता है। यह तब अधिक उपयोगी होता है जब आप अपने TRY
. में कुछ सत्यापन जांच कर रहे होते हैं लेन-देन खोलने से पहले ब्लॉक करें जैसे कि परम मूल्यों और अन्य सामानों की जाँच करना और TRY
. में त्रुटि उठाना यदि कोई सत्यापन जांच विफल हो जाती है तो ब्लॉक करें। उस स्थिति में, नियंत्रण CATCH
. पर कूद जाएगा बिना लेन-देन खोले भी ब्लॉक करें। वहां आप किसी भी खुले लेनदेन की जांच कर सकते हैं और यदि कोई खुला लेनदेन है तो रोलबैक कर सकते हैं। आपके मामले में, आपको वास्तव में किसी भी खुले लेनदेन की जांच करने की आवश्यकता नहीं है क्योंकि आप CATCH
दर्ज नहीं करेंगे। ब्लॉक करें जब तक कि आपके लेन-देन में कुछ गलत न हो जाए।
DELETE
executed को निष्पादित करने के बाद यह न पूछें संचालन चाहे उसे प्रतिबद्ध करने या वापस रोल करने की आवश्यकता हो; लेन-देन खोलने से पहले ये सभी सत्यापन करें। एक बार लेन-देन खोलने के बाद, इसे तुरंत करें और किसी भी त्रुटि के मामले में, त्रुटि प्रबंधन करें (लगभग सभी त्रुटि कार्यों का उपयोग करके विस्तृत जानकारी प्राप्त करके आप अच्छा काम कर रहे हैं)।
BEGIN TRY
BEGIN TRANSACTION SCHEDULEDELETE
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
COMMIT TRANSACTION SCHEDULEDELETE
PRINT 'X rows deleted. Operation Successful Tara.' --calculation cut out.
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION SCHEDULEDELETE
PRINT 'Error detected, all changes reversed'
END
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
END CATCH