Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Ta instrukcja powoduje wycofanie jawnej lub niejawnej transakcji na początku transakcji lub do punktu zapisu wewnątrz transakcji. Możesz użyć ROLLBACK TRANSACTION polecenia , aby wymazać wszystkie modyfikacje danych wprowadzone od początku transakcji lub do punktu zapisu. Zwalnia również zasoby przechowywane przez transakcję.
Wycofywanie transakcji nie obejmuje zmian wprowadzonych w zmiennych lokalnych ani zmiennych tabeli. Te zmiany nie są usuwane przez tę instrukcję.
Transact-SQL konwencje składni
Syntax
Składnia dla programu SQL Server, usługi Azure SQL Database i bazy danych SQL Fabric.
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Składnia magazynu danych sieci szkieletowej, usługi Azure Synapse Analytics i równoległej bazy danych magazynu danych.
ROLLBACK { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
Nazwa przypisana do transakcji na .BEGIN TRANSACTION
transaction_name muszą być zgodne z regułami identyfikatorów, ale są używane tylko 32 pierwsze znaki nazwy transakcji. W przypadku zagnieżdżania transakcji transaction_name musi być nazwą najbardziej zewnętrznej BEGIN TRANSACTION instrukcji.
transaction_name zawsze uwzględnia wielkość liter, nawet jeśli wystąpienie programu SQL Server nie uwzględnia wielkości liter.
@tran_name_variable
Nazwa zmiennej zdefiniowanej przez użytkownika zawierająca prawidłową nazwę transakcji. Zmienna musi być zadeklarowana przy użyciu typu danych char, varchar, nchar lub nvarchar .
savepoint_name
savepoint_name z instrukcji SAVE TRANSACTION .
savepoint_name muszą być zgodne z regułami dotyczącymi identyfikatorów. Użyj savepoint_name , gdy wycofanie warunkowe powinno mieć wpływ tylko na część transakcji.
@savepoint_variable
Nazwa zmiennej zdefiniowanej przez użytkownika zawierającej prawidłową nazwę punktu zapisywania. Zmienna musi być zadeklarowana przy użyciu typu danych char, varchar, nchar lub nvarchar .
Obsługa błędów
Instrukcja ROLLBACK TRANSACTION nie generuje żadnych komunikatów dla użytkownika. Jeśli w procedurach składowanych lub wyzwalaczach są wymagane ostrzeżenia, użyj RAISERROR instrukcji or PRINT .
RAISERROR jest preferowaną instrukcją wskazującą błędy.
Remarks
ROLLBACK TRANSACTION bez savepoint_name lub transaction_name wraca do początku transakcji. W przypadku zagnieżdżania transakcji ta sama instrukcja powoduje wycofanie wszystkich transakcji wewnętrznych do najbardziej zewnętrznej BEGIN TRANSACTION instrukcji. W obu przypadkach ROLLBACK TRANSACTION dekrementuje funkcję systemową @@TRANCOUNT do 0.
ROLLBACK TRANSACTION <savepoint_name> nie powoduje dekrementacji @@TRANCOUNT.
ROLLBACK TRANSACTION nie może odwoływać się do savepoint_name w transakcjach rozproszonych uruchomionych jawnie lub BEGIN DISTRIBUTED TRANSACTION eskalowanych z transakcji lokalnej.
Nie można wycofać transakcji po COMMIT TRANSACTION wykonaniu instrukcji, z wyjątkiem sytuacji, gdy COMMIT TRANSACTION jest skojarzona z zagnieżdżonym transakcją zawartą w transakcji, która jest wycofana. W tym przypadku zagnieżdżona transakcja zostanie wycofana, nawet jeśli została wystawiona COMMIT TRANSACTION dla niej.
W ramach transakcji zduplikowane nazwy punktów zapisywania są dozwolone, ale ROLLBACK TRANSACTION użycie zduplikowane nazwy punktu zapisywania jest przywracane tylko do najnowszej SAVE TRANSACTION przy użyciu tej nazwy punktu zapisywania.
Interoperability
W procedurach ROLLBACK TRANSACTION składowanych instrukcje bez savepoint_name lub transaction_name wycofać wszystkie instrukcje do najbardziej zewnętrznego BEGIN TRANSACTION.
ROLLBACK TRANSACTION Instrukcja w procedurze składowanej, która powoduje@@TRANCOUNT, że ma inną wartość po zakończeniu procedury składowanej niż @@TRANCOUNT wartość wywołana procedura składowana powoduje wygenerowanie komunikatu informacyjnego. Ten komunikat nie ma wpływu na kolejne przetwarzanie.
Jeśli element ROLLBACK TRANSACTION jest wystawiany w wyzwalaczu:
Wszystkie modyfikacje danych wprowadzone w tym punkcie w bieżącej transakcji zostaną wycofane, w tym wszelkie wprowadzone przez wyzwalacz.
Wyzwalacz kontynuuje wykonywanie pozostałych instrukcji po instrukcji
ROLLBACK. Jeśli którakolwiek z tych instrukcji modyfikuje dane, modyfikacje nie są wycofane. Żadne zagnieżdżone wyzwalacze nie są wyzwalane przez wykonanie tych pozostałych instrukcji.Instrukcje w partii po instrukcji, która wyzwoliła wyzwalacz, nie są wykonywane.
@@TRANCOUNT parametr jest zwiększany o jeden podczas wprowadzania wyzwalacza, nawet w trybie automatycznego zatwierdzenia. (System traktuje wyzwalacz jako domniemaną transakcję zagnieżdżonych).
ROLLBACK TRANSACTION instrukcje w procedurach składowanych nie mają wpływu na kolejne instrukcje w partii, która nazwała procedurę; kolejne instrukcje w partii są wykonywane.
ROLLBACK TRANSACTION instrukcje w wyzwalaczach kończą partię zawierającą instrukcję, która wyzwoliła wyzwalacz; kolejne instrukcje w partii nie są wykonywane.
Wpływ kursorów ROLLBACK na kursory jest definiowany przez następujące trzy reguły:
Po
CURSOR_CLOSE_ON_COMMITustawieniuON,ROLLBACKzamyka się, ale nie cofa przydziału wszystkich otwartych kursorów.W
CURSOR_CLOSE_ON_COMMITzestawieOFFROLLBACKnie ma wpływu na otwarte synchroniczneSTATIClubINSENSITIVEkursory ani kursory asynchroniczneSTATIC, które zostały w pełni wypełnione. Otwarte kursory dowolnego innego typu są zamknięte, ale nie cofnięto przydziału.Błąd, który kończy partię i generuje wewnętrzny przydział wycofywania powoduje cofnięcie przydziału wszystkich kursorów zadeklarowanych w partii zawierającej instrukcję błędu. Wszystkie kursory są cofane niezależnie od typu lub ustawienia .
CURSOR_CLOSE_ON_COMMITObejmuje to kursory zadeklarowane w procedurach składowanych wywoływanych przez partię błędów. Kursory zadeklarowane w partii przed partią błędów podlegają dwóm pierwszym regułom. Błąd zakleszczenia jest przykładem tego typu błędu. InstrukcjaROLLBACKwystawiona w wyzwalaczu również automatycznie generuje ten typ błędu.
Zachowanie blokujące
Instrukcja ROLLBACK TRANSACTION określająca savepoint_name zwalnia wszystkie blokady, które są uzyskiwane poza punktem zapisywania, z wyjątkiem eskalacji i konwersji. Te blokady nie są zwalniane i nie są konwertowane z powrotem na poprzedni tryb blokady.
Permissions
Wymaga członkostwa w publicznej roli .
Examples
W poniższym przykładzie pokazano efekt wycofywania nazwanej transakcji. Po utworzeniu tabeli następujące instrukcje rozpoczynają nazwaną transakcję, wstaw dwa wiersze, a następnie wycofają transakcję o nazwie w zmiennej @TransactionName. Inna instrukcja poza nazwaną transakcją wstawia dwa wiersze. Zapytanie zwraca wyniki poprzednich instrukcji.
USE tempdb;
GO
CREATE TABLE ValueTable ([value] INT);
GO
DECLARE @TransactionName VARCHAR(20) = 'Transaction1';
BEGIN TRANSACTION @TransactionName
INSERT INTO ValueTable
VALUES (1), (2);
ROLLBACK TRANSACTION @TransactionName;
INSERT INTO ValueTable
VALUES (3), (4);
SELECT [value]
FROM ValueTable;
DROP TABLE ValueTable;
Oto zestaw wyników.
value
-----
3
4