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

Cách khôi phục hoặc cam kết một giao dịch trong SQL Server

Tin tốt là một giao dịch trong SQL Server có thể kéo dài nhiều đợt (mỗi exec được coi như một lô riêng biệt.)

Bạn có thể bọc EXEC của mình câu lệnh trong BEGIN TRANSACTIONCOMMIT nhưng bạn sẽ cần phải tiến thêm một bước và quay lại nếu có bất kỳ lỗi nào xảy ra.

Lý tưởng nhất là bạn muốn một cái gì đó như thế này:

BEGIN TRY
    BEGIN TRANSACTION 
        exec( @sqlHeader)
        exec(@sqlTotals)
        exec(@sqlLine)
    COMMIT
END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

BEGIN TRANSACTIONCOMMIT Tôi tin rằng bạn đã quen thuộc với. BEGIN TRYBEGIN CATCH về cơ bản có các khối để bắt và xử lý bất kỳ lỗi nào xảy ra. Nếu bất kỳ EXEC nào của bạn câu lệnh phát sinh lỗi, quá trình thực thi mã sẽ chuyển đến CATCH khối.

Mã xây dựng SQL hiện tại của bạn phải nằm ngoài giao dịch (ở trên) vì bạn luôn muốn giữ cho các giao dịch của mình càng ngắn càng tốt.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mở tệp .bak SQL Server (Không khôi phục!)

  2. Hết thời gian truy vấn từ ứng dụng web nhưng chạy tốt từ studio quản lý

  3. Sự khác biệt của SQL Server (đối diện với giao nhau)

  4. Thêm mệnh đề WHERE vào SQL động / lập trình

  5. Kích hoạt SQL Server - thứ tự thực thi