Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thoát và khôi phục mọi thứ trong tập lệnh khi bị lỗi

Khi lỗi xảy ra, giao dịch sẽ tự động được khôi phục và lô hiện tại bị hủy bỏ.

Tuy nhiên, việc thực thi tiếp tục sang đợt tiếp theo. Vì vậy, tất cả những thứ trong lô sau khi lỗi sẽ được thực thi. Và sau đó, khi bạn kiểm tra lỗi sau đó, bạn cố gắng khôi phục một giao dịch đã được khôi phục.

Ngoài ra, để dừng toàn bộ tập lệnh, không chỉ lô hiện tại, bạn nên sử dụng:

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

Xem câu trả lời của tôi ở đây để biết chi tiết về cái đó.

Vì vậy, bạn cần kiểm tra @error sau mỗi đợt, tôi nghĩ rằng một cái gì đó như thế này sẽ hoạt động:

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 Server SAU KHI CHÈN kích hoạt không thấy hàng vừa chèn

  2. Phân tích cú pháp chuỗi JSON bằng sql

  3. Nối các giá trị dựa trên ID

  4. Mẹo để giảm độ phức tạp của máy chủ SQL của bạn

  5. Sao chép dữ liệu từ Salesforce sang SQL Server với Spectral Core