Udostępnij za pośrednictwem


zatwierdzanie TRANSACTION (języka Transact-SQL)

Oznacza koniec zakończonej powodzeniem transakcji bezpośrednia lub pośrednia.Jeśli ma wartość 1, @@ TRANCOUNT przekazywać transakcję powoduje, że wszystkie zmiany danych są wykonywane od momentu rozpoczęcia transakcji nieodłączną częścią bazy danych, zwalnia zasoby, posiadaniu transakcji i zmniejsza @@ TRANCOUNT na 0.Jeśli @@ TRANCOUNT jest większa niż 1, przekazywać transakcję zmniejsza @@ TRANCOUNT tylko przez 1 i transakcja pozostaje aktywny.

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

COMMIT { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ]
[ ; ]

Argumenty

  • transaction_name
    Is ignored by the SQL Server Database Engine.transaction_name specifies a transaction name assigned by a previous BEGIN TRANSACTION.transaction_namemust conform to the rules for identifiers, but cannot exceed 32 characters.transaction_name can be used as a readability aid by indicating to programmers which nested BEGIN TRANSACTION the COMMIT TRANSACTION is associated with.

  • @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 32 znaków, pozostałe znaki są obcinane.

Remarks

Jest on odpowiedzialny Transact-SQL Programista do ogłaszania przekazywać transakcję tylko w punkcie, gdy wszystkie dane, do którego odnosi się transakcja jest logicznie poprawne.

Jeśli transakcja przekazana została Transact-SQL transakcja rozproszona, przekazywać transakcję wyzwala usługi MS DTC, aby zatwierdzić wszystkie serwery biorącej udział w transakcji za pomocą protokół zatwierdzanie dwufazowe. Jeśli transakcja lokalna obejmuje dwa lub więcej baz danych w tym samym wystąpieniu Database Engine, wystąpienie używa wewnętrznego zatwierdzanie dwufazowe transakcji do zatwierdzania wszystkich baz danych dotyczących transakcji.

Przełącznik stosowany w transakcji zagnieżdżonych, przekazywania transakcje wewnętrzne nie należy zwolnić zasoby ani dokonać ich modyfikacji na stałe.Zmiany danych są zmienione na stałe i zasoby zwalniane tylko wtedy, gdy jest zaangażowana w transakcji zewnętrznych.Każdy przekazywać transakcję podczas @@ TRANCOUNT jest większa niż 1 po prostu zmniejsza @@ TRANCOUNT przez 1.Gdy @@ TRANCOUNT jest ostatecznie zmniejszona do 0, cała transakcja zewnętrzna jest zobowiązana.Ponieważ transaction_name jest ignorowany przez Database Engine, wydawanie przekazywać transakcję odwoływania się do nazwy transakcję zewnętrzną, gdy istnieją zaległe transakcje wewnętrzne tylko zmniejsza @@ TRANCOUNT przez 1.

Wydawanie przekazywać transakcję podczas @@ TRANCOUNT jest 0 powoduje błąd; nie ma żadnych odpowiednich instrukcji BEGIN TRANSACTION.

Użytkownik nie może wycofać transakcji po przekazywać transakcję wydano instrukcji, ponieważ dokonano zmian danych nieodłączną częścią bazy danych.

The Database Engine in SQL Server 2000 and later increments the transaction count within a instrukcja only when the transaction count is 0 at the start of the instrukcja. W SQL Server w wersja 7.0, liczba transakcji zawsze jest zwiększane, bez względu na to liczba transakcji w momencie rozpoczęcia w instrukcja. Może to spowodować wartość zwracana przez @@ TRANCOUNT w wyzwalaczy będzie niższa w SQL Server 2000 i później niż w SQL Server w wersja 7.0.

W SQL Server 2000 i później, gdy przekazywać transakcję lub instrukcji zatwierdzanie praca jest wykonywana w wyzwalacz i nie ma żadnych odpowiedniej jawny lub niejawny instrukcji BEGIN TRANSACTION instrukcji na początku wyzwalacza, użytkownicy mogą widzieć różne zachowanie niż w SQL Server w wersja 7.0. Umieszczanie przekazywać transakcję lub instrukcji zatwierdzanie pracę w wyzwalacz nie jest zalecane.

Uprawnienia

Członkostwo w grupie wymaga publiczne roli.

Przykłady

A.Aby zatwierdzanie transakcji.

W tym przykładzie powoduje usunięcie zadanie Kandydat.

USE AdventureWorks;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION;
GO

B.Aby przekazać transakcji zagnieżdżonych.

W tym przykładzie jest tworzona tabela, generuje trzy poziomy transakcji zagnieżdżonych, a następnie zatwierdzeniu transakcji zagnieżdżonych.Mimo że ma każda instrukcja zatwierdzanie TRANSACTION transaction_name parametr, nie ma żadnej zależności między zatwierdzanie TRANSACTION i instrukcji BEGIN TRANSACTION. The transaction_name parameters are simply readability aids to help the programmer ensure that the proper number of commits are coded to decrement @@TRANCOUNT to 0 and thereby zatwierdzanie the outer transaction.

USE AdventureWorks;
GO
IF OBJECT_ID(N'TestTran',N'U') IS NOT NULL
    DROP TABLE TestTran;
GO
CREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
-- This statement sets @@TRANCOUNT to 1.
BEGIN TRANSACTION OuterTran;
GO
PRINT N'Transaction count after BEGIN OuterTran = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
INSERT INTO TestTran VALUES (1, 'aaa');
GO
-- This statement sets @@TRANCOUNT to 2.
BEGIN TRANSACTION Inner1;
GO
PRINT N'Transaction count after BEGIN Inner1 = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
INSERT INTO TestTran VALUES (2, 'bbb');
GO
-- This statement sets @@TRANCOUNT to 3.
BEGIN TRANSACTION Inner2;
GO
PRINT N'Transaction count after BEGIN Inner2 = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
INSERT INTO TestTran VALUES (3, 'ccc');
GO
-- This statement decrements @@TRANCOUNT to 2.
-- Nothing is committed.
COMMIT TRANSACTION Inner2;
GO
PRINT N'Transaction count after COMMIT Inner2 = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
-- This statement decrements @@TRANCOUNT to 1.
-- Nothing is committed.
COMMIT TRANSACTION Inner1;
GO
PRINT N'Transaction count after COMMIT Inner1 = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
-- This statement decrements @@TRANCOUNT to 0 and
-- commits outer transaction OuterTran.
COMMIT TRANSACTION OuterTran;
GO
PRINT N'Transaction count after COMMIT OuterTran = '
    + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO