Instrukcji BEGIN TRANSACTION (języka Transact-SQL)
Oznacza punkt początkowy jawne transakcji lokalnej.Instrukcji BEGIN TRANSACTION dzieli @@ TRANCOUNT 1.
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[ ; ]
Argumenty
transaction_name
Is the name assigned to the transaction.transaction_name must conform to the rules for identifiers, but identifiers longer than 32 characters are not allowed.Nazwy transakcji może być używany tylko w przypadku peryferyjnych pary zagnieżdżonych instrukcji BEGIN... zatwierdzanie lub BEGIN... ROLLBACK.@tran\_name\_variable
STARTUP_STATE = {NA | WYŁĄCZONA}Zmienna musi być zadeklarowana z char, varchar, nchar, lub nvarchar Typ danych. Jeśli więcej niż 32 znaki są przekazywane do zmiennej, będą używane tylko pierwszych 32 znaków, pozostałe znaki zostaną obcięte.WITH MARK [ 'description' ]
Specifies that the transaction is marked in the log.description is a string that describes the mark.Jeśli description jest ciągiem Unicode, a dłuższa niż 255 znaków są obcinane do 255 znaków, zanim będą przechowywane w wartości msdb.dbo.logmarkhistory tabela.Jeśli description to ciąg nie obsługujących kodu Unicode, wartości dłużej, niż 510 znaki są obcinane do 510 znaków.Jeśli używany jest z znaku, należy określić nazwę transakcji.WITH znak umożliwia przywracanie dziennik transakcji o nazwie znaku.
Remarks
Instrukcji BEGIN TRANSACTION reprezentuje punkt, w którym dane przez połączenie jest logicznie i fizycznie zgodne.Jeśli wystąpią błędy, wszystkie zmiany danych wprowadzone po instrukcji BEGIN TRANSACTION może zostać przywrócona zwrócić dane do tego znanego stanu spójności.Trwa każdej transakcji, dopóki nie albo zakończy bez błędów i przekazywać transakcję do dokonywania modyfikacji nieodłączną częścią bazy danych, lub wystąpią błędy, a wszystkie zmiany zostaną usunięte za pomocą instrukcja ROLLBACK TRANSACTION.
instrukcja BEGIN TRANSACTION uruchamia transakcji lokalnej dla połączenia, wydawanie instrukcja.W zależności od bieżących transakcji izolacji poziom ustawień, nabyte wiele zasobów do obsługi Transact-SQL instrukcje wydany przez połączenia są zablokowane przez transakcję zakończenia instrukcją zatwierdzanie TRANSACTION lub ROLLBACK TRANSACTION. Przez dłuższy czas, po lewej oczekujących transakcji może uniemożliwić innym użytkownikom uzyskanie dostępu do tych zasobów zablokowane, a także można uniknąć obcinania dziennika.
Chociaż instrukcji BEGIN TRANSACTION uruchamia transakcji lokalnej, go nie jest rejestrowany dziennik transakcji do momentu zastosowania później wykonuje akcja, która musi być rejestrowane w dzienniku, takie jak wykonywanie INSERT, UPDATE, lub Instrukcja DELETE.Aplikacja może wykonać akcja, takich jak pobieranie blokady do ochrony poziom izolacji transakcji z instrukcji SELECT, ale nic nie jest rejestrowane w dzienniku, dopóki aplikacja wykonuje czynność modyfikacji.
Nazywanie wielu transakcji w serii transakcji zagnieżdżonych o nazwie transakcji ma niewielkie wpływu na transakcję.Tylko pierwsza nazwa transakcji (zewnętrzne) jest zarejestrowany w systemie.Wycofywanie jakakolwiek inna nazwa (inny niż nazwa prawidłowego punkt bezpieczny) generuje błąd.Brak instrukcji wykonywane przed wycofywania w rzeczywistości przywracana jest w momencie wystąpienia tego błędu.Instrukcje są przywracane tylko podczas transakcji zewnętrznych zostanie przywrócona.
Transakcja lokalna uruchomione przez instrukcja BEGIN TRANSACTION jest przekazany do transakcja rozproszona, jeśli następujące akcje są wykonywane przed instrukcja jest przekazana lub wycofana:
Instrukcja INSERT, DELETE lub UPDATE, która odwołuje się do tabela zdalnej serwer połączony jest wykonywany.Instrukcja INSERT, UPDATE lub DELETE kończy się niepowodzeniem, jeśli nie obsługuje dostawca OLE DB, używane w celu uzyskania dostępu do serwer połączony ITransactionJoin interfejs.
Wywołanie jest dokonywane zdalnego procedura przechowywana, gdy opcja REMOTE_PROC_TRANSACTIONS jest zestaw on.
Kopia lokalna SQL Server staje się kontrolera transakcji i używa Microsoft Koordynator transakcja rozproszona (MS DTC) do zarządzania transakcja rozproszona.
Transakcja może być jawnie wykonywany jako transakcja rozproszona za pomocą instrukcji BEGIN transakcji ROZPROSZONEJ.Aby uzyskać więcej informacji zobaczBEGIN DISTRIBUTED TRANSACTION (Transact-SQL).
Zaznaczone transakcje
Opcja WITH znaku powoduje, że nazwa transakcji, które mają być umieszczone dziennik transakcji.Podczas przywracania bazy danych do wcześniejszego stanu, zaznaczonej transakcji można użyć zamiast data i godziny.Aby uzyskać więcej informacji zobacz Using Marked Transactions (Full Recovery Model) i przywracanie (języka Transact-SQL).
Ponadto znaczniki dziennik transakcji są niezbędne, jeśli trzeba odzyskać zbiór powiązanych baz danych do stanu spójności logicznie.Znaki mogą być umieszczone w dziennikach transakcji powiązanych baz danych przez transakcja rozproszona.Odzyskiwanie zestaw pokrewnych baz danych, aby wyniki te znaki zestaw baz danych, które są zgodne transakcyjnie.Umieszczanie znaków w bazach danych powiązanych wymaga specjalnych procedur.
Znak jest umieszczana dziennik transakcji tylko wtedy, gdy baza danych jest aktualizowana przez oznaczona transakcja.Transakcje, które nie należy modyfikować dane nie zostały zaznaczone.
POCZĄTKOWY TRAN new_name WITH znak może być zagnieżdżony w obrębie istniejących transakcji, które nie jest oznaczony jako. Na wykonanie tej czynności, new_name staje się nazwę znaku dla transakcji, pomimo transakcji może już mieć nazwę. W poniższym przykładzie M2 jest to nazwa znaku.
BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT * from table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;
Gdy zagnieżdżanie transakcji, próby oznaczanie transakcji, która jest już oznaczona jako skutkuje komunikat z ostrzeżeniem (nie błąd):
"ROZPOCZĘCIE...; T1 TRAN ZE ZNAKIEM „
"...; Tabela1 UPDATE"
"ROZPOCZĘCIE...; M2 TRAN ZE ZNAKIEM „
"Serwer: Msg 3920 poziom 16, State 1, wiersz 3 "
"WITH znak opcja dotyczy tylko najpierw BEGIN TRAN WITH oznaczyć. „
"Opcja jest ignorowana."
Uprawnienia
Członkostwo w grupie wymaga publiczne roli.
Przykłady
A.Nadawanie nazw transakcji
W poniższym przykładzie pokazano, jak nazwać transakcji.
DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
USE AdventureWorks;
DELETE FROM AdventureWorks.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
GO
B.Oznaczanie transakcji
W poniższym przykładzie przedstawiono sposób oznaczania transakcji.Transakcja CandidateDelete jest zaznaczone.
BEGIN TRANSACTION CandidateDelete
WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks;
GO
DELETE FROM AdventureWorks.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GO
See Also