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

क्या मुझे एक SQL सर्वर प्रक्रिया में try..catch ब्लॉक और स्पष्ट रोलबैक का उपयोग करने की आवश्यकता है?

आपके प्रश्न का उत्तर SET XACT_ABORT पर निर्भर करता है। सेटिंग:

उदाहरण के लिए, निम्न कोड का प्रयास करें। 0 से पहला भाग त्रुटि उत्पन्न करता है लेकिन निष्पादन जारी रखता है . शून्य से दूसरा भाग त्रुटि उत्पन्न करता है और निष्पादन रोक देता है:

begin transaction

set xact_abort off
    
select 1 / 0 -- causes divide by zero error, but continues
select @@trancount -- returns 1

set xact_abort on

select 1 / 0 -- causes divide by zero error and terminates execution
select @@trancount -- we never get here

rollback

यदि XACT_ABORT चालू है, तो त्रुटियां लेन-देन को रोक देंगी, और आपको TRY / CATCH की आवश्यकता नहीं है।

यदि XACT_ABORT बंद है, तो आपको यह देखने के लिए प्रत्येक कथन की स्थिति की जांच करनी होगी कि क्या कोई त्रुटि हुई है:

begin transaction

delete from...
if @@error <> 0
begin
    if @@trancount > 0
        rollback
    return
end

insert into...
if @@error <> 0
begin
    if @@trancount > 0
        rollback
    return
end

commit

हालाँकि, यदि आपको कभी कोई ऐसा मामला मिलता है जहाँ आपको TRY / CATCH की आवश्यकता होती है, तो त्रुटि होने पर आपको कुछ विशेष करने की आवश्यकता हो सकती है। यदि ऐसा है, तो अपवाद से निपटने के लिए TRY / CATCH करना न भूलें:

begin transaction

set xact_abort on

begin try
    select 1 / 0 -- causes divide by zero error and terminates execution
    select @@trancount -- we never get here
    commit
end try
begin catch
    select xact_state() -- this will be -1 indicating you MUST rollback before doing any other operations
    select @@trancount -- this will probably be one, because we haven't ended the transaction yet
    if xact_state() <> 0
    begin try
        select 'rollback'
        rollback
        
        -- do something to handle or record the error before leaving the current scope
        select 'exception processing here'
        --insert into...
    end try
    begin catch
        -- ignore rollback errors
    end catch
    
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. पासवर्ड कॉलम को एन्क्रिप्ट कैसे करें

  2. चयनित परिणामों को सम्मिलित स्क्रिप्ट में परिवर्तित करना - SQL सर्वर

  3. 1 पंक्ति तालिका को कुंजी-मान युग्म तालिका में समतल करना

  4. T-SQL का उपयोग करके SQL सर्वर में एक कॉलम कैसे निकालें

  5. WHERE स्टेटमेंट में CASE का उपयोग करना जब पैरामीटर में कई मान हों