Wycofywanie transakcji (Transact-SQL)
Przywraca poprzednie wersje jawne lub transakcja niejawna do początku transakcji lub punkt zapisu wewnątrz transakcji.
Składnia
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Argumenty
transaction_name
To nazwa przypisana do transakcji w instrukcji BEGIN TRANSACTION.transaction_namemuszą być zgodne z zasadami identyfikatorów, ale tylko pierwszych 32 znaków nazwy transakcji są używane.Gdy zagnieżdżanie transakcji,transaction_name musi być nazwą peryferyjnych instrukcji BEGIN TRANSACTION instrukcja.**@**tran_name_variable
Jest nazwa zmiennej użytkownika zawierający nazwę prawidłowego transakcji.Zmienna musi być zadeklarowana z char, varchar, nchar, lub nvarchar typu danych.savepoint_name
Jest savepoint_name z zapisywanie transakcji instrukcja.savepoint_namemuszą być zgodne z zasadami identyfikatorów.Użycie savepoint_name podczas wycofywania warunkowego powinno mieć wpływu na tylko część transakcji.**@**savepoint_variable
Jest nazwa zmiennej użytkownika zawierający nazwę prawidłowego punkt zapisu .Zmienna musi być zadeklarowana z char, varchar, nchar, lub nvarchar typu danych.
Uwagi
Wycofywanie transakcji powoduje wymazanie wszystkich danych modyfikacje od rozpoczęcia transakcji lub do punkt zapisu.Uwalnia zasoby utrzymywane przez transakcję.
Wycofywanie transakcji bez savepoint_name lub transaction_name wycofuje początek transakcji.Gdy zagnieżdżanie transakcji, tej samej instrukcja wycofuje wszystkie transakcje wewnętrzne peryferyjnych instrukcji BEGIN TRANSACTION instrukcja.W obu przypadkach Dekrementuje TRANSAKCJĘ ROLLBACK @@ TRANCOUNT systemowe funkcja 0.Wycofywanie transakcji savepoint_name , nie zmniejsza @@ TRANCOUNT.
Określanie instrukcja TRANSAKCJĘ ROLLBACK savepoint_name zwalnia wszystkie blokady, które są nabywane poza punkt zapisu, z wyjątkiem eskalacyjnym i konwersji.Te blokady nie są zwalniane, a nie są konwertowane do ich poprzedniego trybu blokada .
Wycofywanie transakcji nie można odwoływać się savepoint_name w transakcjach rozproszonych uruchomiona albo jawnie rozpoczęcie transakcji ROZPROSZONYCH lub przekazany z transakcji lokalnej.
Transakcji nie można obniżyć po zatwierdzeniu transakcji instrukcja jest wykonywana.
Transakcji do punkt zapisu zduplikowane nazwy są dozwolone, ale TRANSAKCJĘ ROLLBACK, przy użyciu nazwy zduplikowanych punkt zapisu wycofuje tylko do ostatniej transakcji ZAPISAĆ przy użyciu tej nazwy punkt zapisu .
W procedurach przechowywanych, sprawozdania TRANSAKCJĘ ROLLBACK bez savepoint_name lub transaction_name wycofać wszystkie instrukcje do peryferyjnych transakcji BEGIN.TRANSAKCJĘ ROLLBACK instrukcja powoduje @@ TRANCOUNT zawierać różne wartości po zakończeniu procedura składowana niż wartość @@ TRANCOUNT, gdy procedura składowana została wywołana procedura składowana generuje komunikat informacyjny.Ta wiadomość nie wpływa na dalsze przetwarzanie.
Jeśli TRANSAKCJĘ ROLLBACK jest wydawane w wyzwalacza:
Wszelkich zmian danych wprowadzonych do tego punktu w bieżącej transakcji są przywracane, tym przez wyzwalacz.
Wyzwalacz kontynuuje wykonywanie wszelkich pozostałych oświadczenia po WYCOFYWANIA instrukcja.Jeśli dowolne z tych oświadczeń modyfikowania danych modyfikacje są nie przywracane.Wyzwalacze zagnieżdżone nie są wyzwalane przez wykonanie tych pozostałych instrukcji.
Instrukcje w partia po instrukcja opalanych wyzwalacz nie są wykonywane.
@@ TRANCOUNT jest zwiększany o jeden przy wprowadzaniu wyzwalacza, nawet w tryb autozatwierdzania.(System traktuje wyzwalacza jako domniemanych transakcji zagnieżdżonych).
Instrukcje TRANSAKCJĘ ROLLBACK w procedurach przechowywanych nie mają wpływu na kolejne instrukcje partia o nazwie procedury; wykonywane są kolejne instrukcje w partia .Instrukcje TRANSAKCJĘ ROLLBACK w wyzwalaczy zakończyć partia zawierających instrukcja opalanych wyzwalacza; kolejne instrukcje w partia nie są wykonywane.
Wycofywanie transakcji instrukcja nie daje żadnych wiadomości do użytkownika.Jeśli ostrzeżenia są potrzebne w procedurach przechowywanych lub wyzwalaczy, należy użyć instrukcji RAISERROR lub wydruku.RAISERROR jest preferowany instrukcja wskazujące błędy.
Wpływ WYCOFYWANIA na kursory jest zdefiniowany przez te trzy reguły:
zestaw na CURSOR_CLOSE_ON_COMMIT WYCOFYWANIA zamyka, ale nie deallocate wszystkich otwartych kursorów.
Z CURSOR_CLOSE_ON_COMMIT zestaw WYŁĄCZAĆ WYCOFYWANIA nie narusza żadnych otwartych kursorów synchroniczne STATYCZNE lub INSENSITIVE lub asynchronicznego kursory STATYCZNE, które całkowicie wypełniony.Liczby otwartych kursorów innego typu są zamknięte, ale nie cofniętych przydziałów.
Błąd, który kończy partia i generuje wewnętrznego wycofywania zwalnia wszystkie kursory, które zostały zgłoszone w partia zawierających błąd instrukcja.Kursory wszystkie są dealokowane niezależnie od ich typu lub ustawienia CURSOR_CLOSE_ON_COMMIT.Obejmuje to kursory zadeklarowane w procedurach przechowywanych przez błąd partia.Kursory zadeklarowane w partia przed błąd partia podlegają zasadom 1 i 2.Błąd zakleszczenie jest przykładem tego typu błędu.Wycofywanie instrukcja wydane w wyzwalacz również automatycznie generuje błędy tego typu.
Na przykład kod wykazujące TRANSAKCJĘ ROLLBACK, zobacz Zagnieżdżanie transakcji.
Uprawnienia
Wymaga członkostwa w public rolę.
Przykłady
Poniższy przykład przedstawia wynik wycofywanie nazwaną transakcję.
USE TempDB;
GO
CREATE TABLE ValueTable ([value] int)
GO
DECLARE @TransactionName varchar(20) = 'Transaction1';
--These statements start a named transaction,
--insert a two records, and then roll back
--the transaction named in the variable
--@TransactionName.
BEGIN TRAN @TransactionName
INSERT INTO ValueTable VALUES(1)
INSERT INTO ValueTable VALUES(2)
ROLLBACK TRAN @TransactionName
INSERT INTO ValueTable VALUES(3)
INSERT INTO ValueTable VALUES(4)
SELECT * FROM ValueTable
DROP TABLE ValueTable
--Results
--value
-------------
--3
--4
Zobacz także