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

त्रुटि पर स्क्रिप्ट में सब कुछ से बाहर निकलें और रोलबैक करें

जब त्रुटि होती है, लेन-देन स्वचालित रूप से वापस ले लिया जाता है, और वर्तमान बैच निरस्त कर दिया जाता है।

निष्पादन अगले बैच में जारी है, तथापि। तो त्रुटि के बाद बैचों में सभी चीजें निष्पादित हो जाती हैं। और फिर जब आप बाद में त्रुटियों की जांच करते हैं, तो आप पहले से लुढ़के हुए लेन-देन को रोलबैक करने का प्रयास करते हैं।

साथ ही, संपूर्ण स्क्रिप्ट को रोकने के लिए, न कि केवल वर्तमान बैच को, आपको इसका उपयोग करना चाहिए:

raiserror('Error description here', 20, -1) with log

देखें मेरा जवाब यहाँ उस पर विवरण के लिए।

तो आपको @error . की जांच करने की आवश्यकता है प्रत्येक बैच के बाद, मुझे लगता है कि कुछ इस तरह काम करना चाहिए:

BEGIN TRANSACTION
GO

ALTER Stuff
GO

if @@error != 0 raiserror('Script failed', 20, -1) with log
GO

CREATE New Stuff
GO

if @@error != 0 raiserror('Script failed', 20, -1) with log
GO

DROP Old Stuff
GO

if @@error != 0 raiserror('Script failed', 20, -1) with log
GO

PRINT 'No Errors ... Committing changes'
COMMIT TRANSACTION


  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 सर्वर में किसी लिंक किए गए सर्वर के विरुद्ध SERVERPROPERTY() चलाएँ

  2. किसी प्रोफ़ाइल में डेटाबेस मेल खाता जोड़ें (T-SQL)

  3. SQL सर्वर 2005 में, अन्य डेटाबेस में टेबल कैसे प्राप्त करें जिस पर दृश्य निर्भर करता है?

  4. MSSQL2008 - Pyodbc - पिछला SQL एक प्रश्न नहीं था

  5. T-SQL COALESCE GROUPING SETS को बिना किसी डुप्लिकेट के सिंगल कॉलम में सेट करता है