Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa transaksi bersarang dilakukan meskipun TransactionScope.Complete() tidak pernah dipanggil?

Pertama, ada tidak ada yang namanya transaksi bersarang di SQL Server . Ini penting.

Kedua, kedua TransactionScopes menggunakan conn1 sehingga Anda (pada tingkat SQL Server) menambah @@TRANCOUNT untuk setiap BEGIN TRANSACTION

Penjelasan sederhana:transaksi bagian dalam dilakukan ketika transaksi luar dilakukan karena memutar kembali bagian dalam akan mengembalikan keduanya transaksi

Yaitu, COMMIT TRANSACTION (tersirat oleh .Complete dan .Dispose ) mengurangi @@TRANCOUNT sementara ROLLBACK TRANSACTION (tersirat oleh .Dispose saja) membawanya kembali ke nol. Jadi rollback bagian dalam ditekan karena "tidak ada yang namanya transaksi bersarang"

Jika Anda menggunakan conn2 dengan benar di 'lingkup dalam' itu akan berfungsi seperti yang diharapkan karena 2 transaksi tidak terkait di tingkat server basis data. Di situlah pentingnya...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menampilkan Tanggal dalam Format Tanggal AS di SQL Server (T-SQL)

  2. Bagaimana menjalankan SQL yang dihasilkan dari suatu variabel?

  3. Cara menggunakan RANK() di SQL Server

  4. Apakah Mengakhiri Penggunaan menutup Koneksi SQL yang terbuka

  5. PHP, ORM, MSSQL dan Unicode, apakah mungkin untuk membuat ini bekerja bersama?