Ciao, la mia attuale comprensione delle transazioni nidificate in TSQL è che se si hanno più transazioni (più transazioni nidificate all'interno di una transazione "esterna"), tutte le tranasactions devono essere impegnate (con la transazione "esterna" essendo l'ultimo) per eventuali modifiche al database da effettuare. Se il numero di commit è inferiore al numero di transazioni aperte, non vengono apportate modifiche a nessuna delle transazioni. Questa è una panoramica corretta di come funzionano le transazioni nidificate?Transazioni nidificate in TSQL
risposta
La descrizione di COMMIT
è corretta.
Kalen Delaney has an article covering the same type of behavior that you describe.
Tuttavia, come discusso nell'articolo di Kalen, un ROLLBACK
all'interno di una transazione nidificata sarà rollback l'intera transazione esterno, non solo l'operazione interno dove si verifica il ripristino.
Nota i seguenti risultati:
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
ROLLBACK TRAN
SELECT @@trancount
questo è descritto in questo articolo di MSDN, Nesting Transactions:
UN'OPERA ROLLBACK o un'istruzione ROLLBACK TRANSACTION che non ha un nome di transazione esegue il rollback tutte le transazioni nidificate e decrementa @@ TRANCOUNT a 0. UNA TRANSAZIONE ROLLBACK che utilizza la transazione nome della transazione più esterna in una serie di transazioni nidificate ripristina tutte le transazioni nidificate e decrementa @@ TRANCOUNT su 0. Quando non si è sicuri se si è già in una transazione, selezionare @@ TRANCOUNT per determinare se è 1 o più. Se @@ TRANCOUNT è 0, l'utente non si trova in una transazione.
In breve, la vostra risposta è sì. Da Nesting Transactions:
Commettere transazioni interne viene ignorato dal database di SQL Server Engine. La transazione è impegnata o ripristinata sulla base di l'azione intrapresa alla fine della transazione più esterna. Se la transazione esterna viene impegnata, anche le transazioni interne nidificate vengono commesse . Se la transazione esterna viene annullata, tutte le transazioni interne vengono anche ripristinate, indipendentemente dal fatto che le transazioni interne di siano state eseguite singolarmente.
Per quanto riguarda i ROLLBACks, è consentito solo eseguire il ROLLBACK dell'intera transazione esterna.
- 1. transazioni nidificate in SQL Server
- 2. Comportamento transazioni nidificate in EF6
- 3. transazioni nidificate con TransactionScope
- 4. Scopo delle transazioni nidificate
- 5. Come faccio le transazioni nidificate in NHibernate?
- 6. Le transazioni nidificate sono consentite in MySQL?
- 7. TSQL - Disabilitazione dei trigger nelle transazioni
- 8. tsql: è possibile eseguire istruzioni caso nidificate in una selezione?
- 9. Transazioni Mysql nelle transazioni
- 10. CHECKPOINT funziona come COMMIT in TSQL?
- 11. tSQL NOT IN Query
- 12. millisecondo in SQL tsql
- 13. Come eseguire il rollback per salvare le transazioni nidificate utilizzando Hibernate
- 14. Interrogazioni nidificate in Arel
- 15. Transazioni in C#
- 16. Transazioni in Talend
- 17. transazioni MongoDB?
- 18. Disabilita controllo script TSQL?
- 19. TSQL 'Dove' Condizione
- 20. Usando super() in classi nidificate
- 21. creando sequenze nidificate in R
- 22. risorse nidificate in namespace form_for
- 23. risorse nidificate in Django tastypie
- 24. Funzioni anonime nidificate in Clojure
- 25. "nidificate" scoped_lock
- 26. Strutture nidificate
- 27. TSQL FOR XML EXPLICIT
- 28. Abbiamo transazioni in MS-Access?
- 29. Transazioni in "dapper-dot-net"
- 30. Seleziona da unione tsql