Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо се извършва вложена транзакция, дори ако TransactionScope.Complete() никога не се извиква?

Първо, има няма такова нещо като вложена транзакция в SQL Server . Това е важно.

Второ, и двата TransactionScope използват conn1, така че вие ​​(на ниво SQL Server) увеличавате @@TRANCOUNT за всеки BEGIN TRANSACTION

Просто обяснение:вътрешната транзакция се ангажира, когато външната транзакция се ангажира, защото връщането назад на вътрешната би върнало назад и двете транзакции

Това е COMMIT TRANSACTION (подразбира се от .Complete и .Dispose ) намалява @@TRANCOUNT докато ROLLBACK TRANSACTION (подразбира се от .Dispose само) го връща обратно до нула. Така че вътрешното връщане назад е потиснато поради „няма такова нещо като вложени транзакции“

Ако сте използвали conn2 правилно във вътрешния обхват, той ще работи както се очаква, тъй като 2-те транзакции не са свързани на ниво сървър на база данни. Което има значение...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да направите ЛЯВО ANTI SEMI JOIN в SQL Server

  2. Еквивалентът на SQL Server на Sleep():Инструкцията WAITFOR

  3. com.microsoft.sqlserver.jdbc.SQLServerException:Вариантният тип данни не се поддържа

  4. Динамично показване на редове като колони

  5. Как да инсталирате SQLOPS на Mac