Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

टीएसक्यूएल लेनदेन के भीतर प्रयास करें/पकड़ें या इसके विपरीत?

लेन-देन तभी खोलें जब आप 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं SQL सर्वर 2005 में एकाधिक पंक्तियों को अल्पविराम-सीमांकित सूची में कैसे जोड़ सकता हूं?

  2. newid () sql सर्वर फ़ंक्शन के अंदर

  3. SQL सर्वर 2005 में किसी तालिका में एकाधिक कॉलम का योग कैसे प्राप्त करें?

  4. पंक्तियों को ठीक उसी क्रम में लौटाएं जैसे उन्हें डाला गया था

  5. मैं SQL सर्वर 2005 तालिका में NTEXT फ़ील्ड में यूनिकोड/गैर-ASCII वर्ण कैसे ढूंढ सकता हूं?