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

Khôi phục giao dịch bên trong của giao dịch lồng nhau

SQL Server không thực sự hỗ trợ các giao dịch lồng nhau. Chỉ có một giao dịch tại một thời điểm.

Một giao dịch này có một quầy giao dịch lồng nhau cơ bản, @@TRANCOUNT . Mỗi begin transaction tăng bộ đếm lên từng commit transaction giảm nó đi một. Chỉ commit điều đó làm giảm bộ đếm xuống 0 thực sự cam kết một giao dịch.

rollback transaction hoàn tác một giao dịch và xóa @@TRANCOUNT .

Trong trường hợp của bạn, kết quả hài hước là SqlStatement3 được chạy bên ngoài Một giao dịch! commit cuối cùng của bạn sẽ đưa ra một "Yêu cầu GIAO DỊCH CAM KẾT không có ngoại lệ GIAO DỊCH BẮT ĐẦU tương ứng", nhưng ảnh hưởng của SqlStatement3 là vĩnh viễn.

Ví dụ:

create table #t (col1 int)
insert #t (col1) values (1)
BEGIN TRANSACTION
update #t set col1 = 2 -- This gets rolled back
BEGIN TRANSACTION
update #t set col1 = 3 -- This gets rolled back too
ROLLBACK TRANSACTION
update #t set col1 = 4 -- This is run OUTSIDE a transaction!
COMMIT TRANSACTION -- Throws error
select col1 from #t

In 4 . Có thật không. :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phiên lưu trữ Asp.Net 4.0 trong SqlServer

  2. Làm thế nào để triển khai SQL Server Compact Edition 4.0?

  3. Tìm kiếm tùy chỉnh SQL với các ký tự đặc biệt

  4. FREETEXTTABLE luôn có thứ hạng 0

  5. Cách định cấu hình thư cơ sở dữ liệu trong SQL Server