Moje bieżące zrozumienie zagnieżdżonych transakcji w TSQL polega na tym, że jeśli masz wiele transakcji (kilka transakcji zagnieżdżonych w jednej "zewnętrznej" transakcji), wszystkie transakcje muszą zostać zatwierdzone (z "zewnętrzną" transakcją jako ostatnia) dla wszelkich zmian w bazie danych, które należy wprowadzić. Jeśli liczba zatwierdzeń jest mniejsza niż liczba otwartych transakcji, nie są dokonywane żadne zmiany związane z żadną transakcją. Czy jest to poprawny przegląd działania transakcji zagnieżdżonych?Transakcje zagnieżdżone w TSQL
Odpowiedz
Twój opis COMMIT
jest poprawny.
Kalen Delaney has an article covering the same type of behavior that you describe.
Jednak, jak to opisano w artykule Kaleń, w odległości ROLLBACK
w zagnieżdżonej transakcją wycofywania całą transakcję zewnętrzną, nie tylko transakcji wewnętrzną, gdzie następuje wycofania.
zwrócić uwagę na następujące wyniki:
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
ROLLBACK TRAN
SELECT @@trancount
Jest to opisane w artykule MSDN, Nesting Transactions:
dzieło ROLLBACK lub ROLLBACK transakcji, która nie ma nazwę transakcja wycofuje wszystkie transakcje i dekrety zagnieżdżone @@ TRANCOUNT na 0. TRANSAKCJA ROLLBACK, w której używana jest transakcja nazwa najbardziej zewnętrznej transakcji w zestawie transakcji zagnieżdżonych wycofuje wszystkie zagnieżdżone transakcje i dekrementy @@ TRANCOUNT do 0. Jeśli nie masz pewności, czy jesteś już w transakcji, WYBIERZ @@ TRANCOUNT, aby określić, czy jest to 1 lub więcej. Jeśli @@ TRANCOUNT ma wartość 0, oznacza to, że nie jesteś w transakcji.
Krótko mówiąc, twoja odpowiedź brzmi: tak. Od Nesting Transactions:
Zatwierdzanie transakcji wewnętrznych jest ignorowane przez silnik bazy danych SQL Server . Transakcja została zatwierdzona lub wycofana w oparciu o akcję podjętą na końcu najbardziej zewnętrznej transakcji. Jeśli zostanie zatwierdzona zewnętrzna transakcja , wewnętrzne transakcje zagnieżdżone są również zatwierdzane. Jeśli zewnętrzna transakcja zostanie wycofana, wszystkie wewnętrzne transakcje również zostaną wycofane, niezależnie od tego, czy wewnętrzne transakcje zostały zatwierdzone indywidualnie.
Jeśli chodzi o ROLLBACk, dozwolona jest tylko ROLLBACK całą zewnętrzną transakcję.
- 1. Transakcje zagnieżdżone w .NET
- 2. Wiosna zagnieżdżone transakcje
- 3. zagnieżdżone transakcje w SQL Server
- 4. Zagnieżdżone transakcje SQL Server 2008R2 z RAISERROR
- 5. Jak wykonać zagnieżdżone transakcje w NHibernate?
- 6. Pierwsze "org.hibernate.TransactionException: zagnieżdżone transakcje nie są obsługiwane" błąd podczas usuwania
- 7. Transakcje SOA i transakcje rozproszone
- 8. Transakcje w sygnaturze repozytorium
- 9. Transakcje w MongoDB
- 10. Transakcje w C#
- 11. Transakcje w C#
- 12. System miksowania. Transakcje z SqlTransactions
- 13. Zobacz otwarte transakcje w Oracle
- 14. RAILS 3 - Transakcje w kontrolerach
- 15. Transakcje w typowych zestawach danych
- 16. SQL Server 2005: Dlaczego transakcje nazw?
- 17. Tworzenie widoków aktualizowalnych w TSQL
- 18. Wiele instrukcji jak w TSQL
- 19. Co robi "%% DatabaseEx" w TSQL?
- 20. Jak używać pętli w TSQL?
- 21. Co oznacza symbol "#" w TSQL?
- 22. Funkcja w ramach funkcji TSQL
- 23. Spring JdbcTemplate i Transakcje
- 24. Transakcje NHibernate Najlepsze praktyki
- 25. transakcje bazodanowe Android Pokoju
- 26. NHibernate, transakcje i TransactionScope
- 27. TransactionScope i Transakcje
- 28. Transakcje WCF bez MSDTC
- 29. Laravel Eloquent ORM Transakcje
- 30. Jak przetestować transakcje MySQL?