2012-06-09 2 views
11

Nigdy nie zrozumiałem, na czym polega zagnieżdżona transakcja. Zatwierdzenie transakcji zagnieżdżonej nie zobowiązuje niczego - po prostu zmniejsza się @@TRANCOUNT. I ROLLBACK wycofuje wszystko.Cel transakcji zagnieżdżonych

BEGIN TRANSACTION 
    //do an update 
    BEGIN TRANSACTION 
    //do an insert 
    COMMIT TRANSACTION 
COMMIT TRANSACTION 

Jaka jest różnica z tym:

BEGIN TRANSACTION 
    //do an update 
    //do an insert 
COMMIT TRANSACTION 

proszę dać mi przykład dlaczego transakcje zagnieżdżone być stosowane i jak robią różnicę.

Pozdrawiam, Petar

Odpowiedz

8

transakcje zagnieżdżone pozwala kod zadzwonić inny kod (na przykład SPS), która sama korzysta z transakcji bez faktycznego popełnienia transakcję gdy popełnią.

Powiedziawszy, możesz użyć safepoints do wycofania się z transakcji.

Jest dedykowany do tego CodeProject article.

+0

Mogę używać punktów bezpiecznych bez korzystania z transakcji zagnieżdżonych. Procedura przechowywana jest dobrym punktem (nigdy o tym nie myślałem). Ale jeśli nie używam procedury przechowywanej w mojej transakcji (lub nie wywołuję innego kodu), dlaczego potrzebuję zagnieżdżonych transakcji? Ciągle widzę przykłady z zagnieżdżonymi transakcjami i nie widzę sensu ich. –

+0

Czy transakcje zagnieżdżone są użyteczne tylko podczas wywoływania zewnętrznego kodu transakcyjnego? –

+1

Zgadzam się z Tobą i myślę, że są one przydatne do wywoływania zewnętrznego kodu transakcyjnego. Zdolność techniczna serwera SQL do obsługi transakcji zagnieżdżonych jest ważna i niedostępna we wszystkich systemach DB. Są pewne przypadki (takie jak wspomniane SP), gdzie powinieneś także użyć ['SET XACT_ABORT ON'] (http://stackoverflow.com/questions/1150032/what-jest-the-benefit-of-using-set -xact-abort-on-in-a-stored-procedure)), w którym mogą zagnieździć się "naturalnie". Nigdy też nie użyłem jawnie zagnieżdżonych transakcji. – Lucero

0

JEŚLI masz scenariusz, w którym wywołujesz jeden SP zawierający inne wywołanie SP. a ten wewnętrzny SP można również nazwać niezależnie od twojego podania. W takim przypadku konieczne jest umieszczenie transakcji wewnętrznej (na Inner SP), a także na nadrzędnej SP.