sql >> Databáze >  >> RDS >> Sqlserver

Proč je vnořená transakce potvrzena, i když není nikdy volána metoda TransactionScope.Complete()?

Za prvé, existuje žádná taková věc jako vnořená transakce v SQL Server . To je důležité.

Za druhé, oba TransactionScope používají conn1, takže (na úrovni SQL Serveru) zvyšujete @@TRANCOUNT pro každou BEGIN TRANSACTION

Jednoduché vysvětlení:vnitřní transakce je potvrzena při potvrzení vnější transakce, protože vrácení vnitřní transakce by se vrátilo zpět obě transakce

To znamená COMMIT TRANSACTION (předpokládá se .Complete a .Dispose ) sníží @@TRANCOUNT zatímco ROLLBACK TRANSACTION (předpokládá se .Dispose pouze) vrátí jej na nulu. Vnitřní vrácení zpět je tedy potlačeno z důvodu „žádné takové věci jako vnořené transakce“

Pokud byste správně použili conn2 ve vnitřním rozsahu, fungovalo by to podle očekávání, protože tyto 2 transakce na úrovni databázového serveru nesouvisí. Na čem záleží...



  1. Mazání řádků z více tabulek v MySQL

  2. Jak exportovat výsledná data v PostgreSQL do .CSV?

  3. jak mohu kódovat řetězec v HMAC-SHA256 pomocí pl/sql?

  4. přestat vkládat data do databáze při obnovování stránky