BEGIN TRANSACTION (Transact-SQL)
Oznacza punkt początkowy jawne transakcji lokalnej.Instrukcji BEGIN TRANSACTION dzieli @@ TRANCOUNT 1.
Składnia
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[ ; ]
Argumenty
transaction_name
To nazwa przypisana do transakcji.transaction_namemusi spełniać zasady identyfikatory, ale identyfikatory dłużej, niż 32 znaki są niedozwolone.Nazwy transakcji może być używany tylko w peryferyjnych parę zagnieżdżonych BEGIN...ZATWIERDŹ lub rozpocząć...Instrukcje WYCOFYWANIA.@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.Jeśli więcej niż 32 znaki są przekazywane do zmiennej, zostanie użyty tylko pierwszych 32 znaków; pozostałe znaki zostaną obcięte.ZNAKIEM 'description"
Określa, że transakcja jest zaznaczona w dzienniku.descriptionto ciąg opisujący znaku.A description wartość dłuższa niż 128 znaków, jest obcinana do 128 znaków przed są przechowywane w msdb.dbo.logmarkhistory tabela.Jeśli z znak jest używany, należy określić nazwę transakcji.ZE ZNACZNIKIEM umożliwia przywracanie dziennik transakcji o nazwie znacznika.
Uwagi
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 być przywrócenie zwrócić dane do tego znanego stanu spójności.Każda transakcja trwa do momentu albo uzupełnia bez błędów i PRZEKAZAĆ transakcji wydaje się dokonać modyfikacji stałą częścią bazy danych, lub wystąpią błędy i wszystkie modyfikacje są wymazywane za TRANSAKCJĘ ROLLBACK instrukcja.
Instrukcji BEGIN TRANSACTION uruchamia lokalne transakcji dla połączenia wydawania instrukcja.W zależności od bieżących ustawień poziom izolacji transakcji nabyte obsługuje wiele zasobów Transact-SQL sprawozdania wydane przez połączenia są zablokowane przez transakcję, aż do zakończenia za zatwierdzenie transakcji albo TRANSAKCJĘ ROLLBACK instrukcja.Transakcje dla nieuregulowane długi czas można uniemożliwić innym użytkownikom dostęp do tych zasobów zablokowane i można również zapobiec obcinania dziennika.
Chociaż instrukcji BEGIN TRANSACTION uruchamia transakcji lokalnej, go nie jest rejestrowany w dzienniku transakcji aż aplikacja następnie wykonuje akcja muszą być rejestrowane w dzienniku, takich jak wykonywanie INSERT, UPDATE lub DELETE instrukcja.Aplikację można wykonywać akcje, takie jak pobieranie blokady w celu ochrony transakcji poziom izolacji instrukcji SELECT, ale nic nie jest rejestrowane w dzienniku dopóki aplikacja wykonuje modyfikacji akcja.
Nadawanie nazw wielu transakcji w serii transakcji zagnieżdżonych o nazwie transakcji ma niewielki wpływ na transakcję.Tylko pierwsza nazwa transakcji (najbardziej zewnętrzne) jest zarejestrowany w systemie.Wycofywanie inna nazwa (inne niż nazwa prawidłowego punkt zapisu ) generuje błąd.Brak instrukcje wykonywane przed wycofywania w faktprzywracana jest w czas , ten błąd występuje.Oświadczenia są przywracane tylko podczas transakcji zewnętrznych zostanie przywrócona.
Transakcji lokalnej uruchomione przez instrukcji BEGIN TRANSACTION instrukcja jest przekazany do transakcja rozproszona , jeśli następujące akcje są wykonywane przed instrukcja jest przekazana lub wycofana:
INSERT, DELETE lub UPDATE instrukcja , która odwołuje się do tabela zdalna na serwer połączony jest wykonywany.instrukcja INSERT, UPDATE lub DELETE kończy się niepowodzeniem, jeślidostawca OLE DB, umożliwiające dostęp do serwer połączony nie obsługuje ITransactionJoininterfejs.
Gdy opcja REMOTE_PROC_TRANSACTIONS jest zestaw na zdalna procedura składowana dokonywana jest wywołanie.
Lokalna kopia SQL Server staje się kontroler transakcji i korzysta z Microsoft Distributed Transaction Coordinator (MS DTC), aby zarządzać transakcja rozproszona.
Transakcja może być jawnie wykonywany jako transakcja rozproszona za pomocą instrukcji BEGIN TRANSACTION ROZPROSZONYCH.Aby uzyskać więcej informacji, zobacz Rozpoczęcie transakcji ROZPROSZONYCH (Transact-SQL).
Zaznaczone transakcje
Opcja z znaku powoduje, że nazwa transakcji, które mają być umieszczone w dzienniku transakcji.Podczas przywracania bazy danych do wcześniejszego stanu, oznaczona transakcja może służyć zamiast data i czas.Aby uzyskać więcej informacji, zobacz Używając zaznaczonych transakcji (modelu odzyskiwania pełny) i RESTORE (Transact-SQL).
Ponadto znaczniki dziennika transakcji są konieczne, jeśli trzeba odzyskać zestaw powiązanych baz danych do stanu logicznie spójne.Znaki mogą być umieszczane w dziennikach transakcji powiązanych baz danych przez transakcja rozproszona.Odzyskiwanie, zestaw powiązanych baz danych do tych znaków wyniki w zestaw baz danych, które są spójne transakcyjnie.Rozmieszczenie śladów w powiązanych baz danych wymaga specjalnych procedur.
Znak jest umieszczana w dzienniku transakcji tylko wtedy, gdy baza danych jest aktualizowana przez oznaczona transakcja.Transakcje, które nie modyfikują dane nie są oznaczane.
Rozpoczęcie transakcji new_name z znaku można zagnieżdżać wewnątrz już istniejących transakcji, która nie jest oznaczony.Na wykonanie tej czynności, new_name staje się nazwa znacznika dla transakcji, pomimo transakcji może już nadano nazwę.W poniższym przykładzie M2 jest nazwą znaku.
BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT * from table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;
Zagnieżdżanie transakcji, próby umożliwia oznaczanie transakcji jest już oznaczone wyniki w komunikat ostrzegawczy (nie błąd):
"ROZPOCZĘCIE TRANSAKCJI T1 ZNAKIEM...;"
"AKTUALIZUJ Tabela1;"
"ROZPOCZĘCIE TRANSAKCJI M2 ZNAKIEM...;"
"serwer: Msg 3920 poziom: 16, stan: 1, wiersz 3 "
"ZNAKIEM opcja dotyczy tylko rozpoczęcie transakcji z oznaczyć."
"opcja jest ignorowana."
Uprawnienia
Wymaga członkostwa w public rolę.
Przykłady
A.Nadawanie nazw transakcji
Poniższy przykład przedstawia sposób nadania nazwy transakcji.
DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
USE AdventureWorks2008R2;
DELETE FROM AdventureWorks2008R2.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
GO
B.Oznaczanie transakcji
Poniższy przykład pokazuje sposób oznaczania transakcji.Transakcja CandidateDelete jest oznaczony.
BEGIN TRANSACTION CandidateDelete
WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks2008R2;
GO
DELETE FROM AdventureWorks2008R2.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GO
Zobacz także