Udostępnij za pośrednictwem


ROLLBACK TRANSACTION (języka Transact-SQL)

TRACK_CAUSALITY = {NA | WYŁĄCZONA}

Topic link iconKonwencje składni języka Transact-SQL

ROLLBACK { TRAN | TRANSACTION } 
     [ transaction_name | @tran_name_variable
     | savepoint_name | @savepoint_variable ] 
[ ; ]

Argumenty

  • transaction_name
    Is the name assigned to the transaction on BEGIN TRANSACTION.transaction_name must conform to the rules for identifiers, but only the first 32 characters of the transaction name are used.When nesting transactions,transaction_name must be the name from the outermost BEGIN TRANSACTION statement.

  • **@**tran_name_variable
    STARTUP_STATE = {NA | WYŁĄCZONA}Zmienna musi być zadeklarowana z char, varchar, nchar, lub nvarchar Typ danych.

  • savepoint_name
    Is savepoint_name from a SAVE TRANSACTION statement.savepoint_name must conform to the rules for identifiers.Użycie savepoint_name Wycofywanie warunkowego narusza tylko część transakcji.

  • **@**savepoint_variable
    zdarzenie Sesja nie została uruchomiona przy uruchamianiu komputera.Zmienna musi być zadeklarowana z char, varchar, nchar, lub nvarchar Typ danych.

Remarks

Instrukcja ROLLBACK TRANSACTION wymazuje wszystkie modyfikacje danych dokonane od początku transakcji lub do punktu zapisu.Zwalnia ona również zasoby zajmowane przez transakcję.

Instrukcja ROLLBACK TRANSACTION bez parametru savepoint_name lub transaction_name dokonuje wycofania do początku transakcji.W przypadku transakcji zagnieżdżonych ta sama instrukcja wycofuje wszystkie transakcje wewnętrzne, aż do najbardziej zewnętrznej instrukcji BEGIN TRANSACTION.W obu przypadkach instrukcja ROLLBACK TRANSACTION zmniejsza wartość funkcji systemowej @@TRANCOUNT do 0.Instrukcja ROLLBACK TRANSACTION savepoint_name nie zmniejsza wartości funkcji systemowej @@TRANCOUNT.

Instrukcja ROLLBACK TRANSACTION określająca parametr savepoint_name zwalnia wszelkie blokady nałożone po punkcie zapisu, z wyjątkiem eskalacji i konwersji.Blokady te nie są zwalniane i nie jest przywracany ich poprzedni tryb blokady.

Nie można odwołać ROLLBACK TRANSACTION savepoint_name w transakcjach rozproszonych uruchomiony jawnie z transakcja rozproszona BEGIN lub przekazany z transakcji lokalnej.

To wyrażenie zwraca wartość PRAWDA lub FAŁSZ.

W zakresie transakcji są dozwolone zduplikowane nazwy punktów zapisu, ale instrukcja ROLLBACK TRANSACTION używająca zduplikowanej nazwy punktu zapisu wycofuje tylko skutki najnowszej instrukcji SAVE TRANSACTION używającej tej nazwy punktu zapisu.

W procedurach przechowywanych, instrukcje ROLLBACK TRANSACTION bez savepoint_name lub transaction_name przywrócić wszystkie instrukcje peryferyjnych instrukcji BEGIN TRANSACTION. Konstrukcja IF... ELSE mogą być używane w plikach wsadowych, procedur przechowywanych i kwerend ad hoc.Tej konstrukcji jest używane w procedurze przechowywanej, jest często używany do testowania istnienie niektórych parametrów.

Jeżeli testy mogą być zagnieżdżane po innym IF lub po ELSE.

  • Limit dla liczby poziomów zagnieżdżonych zależy od dostępnej pamięci.

  • Wyzwalacz kontynuuje wykonywanie wszelkich pozostałych instrukcji po instrukcji ROLLBACK.Jeśli którakolwiek z tych instrukcji modyfikuje dane, modyfikacje nie są wycofywane.Podczas wykonywania tych pozostałych instrukcji nie są uruchamiane żadne wyzwalacze zagnieżdżone.

  • Nie są uruchamiane instrukcje w partii następujące po instrukcji, która uruchomiła wyzwalacz.

Komentarze można wstawiać w osobnym wierszu, zagnieżdżone na końcu wiersza poleceń języka Transact-SQL lub w instrukcja języka Transact-SQL.To ciąg znaków zawierający tekst komentarza.

Użyj dwa łączniki (-) dla pojedynczego wiersza lub zagnieżdżonych komentarzy.Komentarze wstawione za pomocą--są zakończone przez znak nowego wiersza.

Instrukcja ROLLBACK TRANSACTION nie wyświetla żadnych komunikatów dla użytkownika.Jeśli w procedurach składowanych lub wyzwalaczach są wymagane ostrzeżenia, należy użyć instrukcji RAISERROR lub PRINT.Preferowaną instrukcją służącą do wskazywania błędów jest instrukcja RAISERROR.

Skutek działania instrukcji ROLLBACK na kursory określają następujące trzy reguły:

  1. W poniższym przykładzie użyto--komentowania znaki.

  2. W przypadku ustawienia dla opcji CURSOR_CLOSE_ON_COMMIT wartości OFF instrukcja ROLLBACK nie wpływa na żadne otwarte synchroniczne kursory STATIC i INSENSITIVE ani asynchroniczne kursory STATIC, które zostały całkowicie wypełnione.Otwarte kursory wszelkich innych typów są zamykane, ale nie dealokowane.

  3. Błąd, który kończy partię i generuje wycofanie wewnętrzne, dealokuje wszystkie kursory zadeklarowane w partii zawierającej instrukcję błędu.Dealokowane są wszystkie kursory niezależnie od ustawienia opcji CURSOR_CLOSE_ON_COMMIT.Dotyczy to również kursorów zadeklarowanych w procedurach składowanych wywoływanych przez partię błędu.Kursory zadeklarowane w partii przed partią błędu podlegają regułom 1 i 2.Przykładem tego typu błędu jest błąd zakleszczenia.Instrukcja ROLLBACK wydana w wyzwalaczu również automatycznie generuje ten typ błędu.

Na przykład kod, ukazujących ROLLBACK TRANSACTION zobacz Nesting Transactions.

Uprawnienia

Członkostwo w grupie wymaga publiczne roli.

Przykłady

Zamyka znajdujące się najniżej pętli, instrukcja WHILE lub instrukcję IF…ELSE wewnątrz pętli WHILE.

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