Udostępnij za pośrednictwem


ZATWIERDZENIA transakcji (Transact-SQL)

Oznacza koniec pomyślne niejawne lub transakcja jawna.Jeśli @@ TRANCOUNT wynosi 1, ZATWIERDZIĆ transakcji sprawia, że przeprowadzone od momentu rozpoczęcia transakcji stałą częścią bazy danych, zwalnia zasoby posiadaniu transakcji i zmniejsza @@ TRANCOUNT 0 wszystkich modyfikacji danych.@@ TRANCOUNT jest większa niż 1, ZATWIERDZIĆ transakcji Dekrementuje @@ TRANCOUNT tylko przez 1 i transakcji pozostanie aktywny.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • transaction_name
    Ignorowane przez Aparat baz danych programu SQL Server.transaction_nameOkreśla nazwę transakcji przypisany przez poprzednie instrukcji BEGIN TRANSACTION.transaction_namemuszą być zgodne z zasadami identyfikatory, ale nie może przekraczać 32 znaków.transaction_namemoże służyć jako pomoc czytelności przez programistów, które zagnieżdżonych instrukcji BEGIN TRANSACTION jest skojarzona TRANSAKCJA COMMIT, wskazując.

  • @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 32 znaków; pozostałe znaki zostaną obcięte.

Uwagi

Jest odpowiedzialne za Transact-SQL programisty wydać tylko w punkcie zatwierdzenia transakcji, gdy wszystkie dane odwołuje się transakcja jest logicznie poprawnych.

Jeśli transakcja przekazana została Transact-SQL transakcja rozproszonawyzwala zatwierdzania transakcji usługi MS DTC za pomocą dwufazowego zatwierdzanie protokół do zatwierdzanie wszystkich serwerów uczestniczącego w transakcji.Jeżeli transakcji lokalnej obejmuje dwa lub więcej baz danych na tym samym wystąpienie programu Aparat baz danych, wystąpienie używa wewnętrznego dwufazowego zatwierdzanie do zatwierdzanie wszystkich baz danych zaangażowanych w transakcję.

Użyto w transakcji zagnieżdżonych zatwierdzenia transakcji wewnętrznych nie zwolnić zasoby lub dokonać ich modyfikacji stałe.Zmiany danych są zmieniane na stałe i zasoby zwalniane tylko, gdy zewnętrzne transakcja została zatwierdzona.Każda TRANSAKCJA zatwierdzenia wydane, gdy @@ TRANCOUNT jest większy niż 1 po prostu Dekrementuje @@ TRANCOUNT przez 1.Gdy @@ TRANCOUNT jest ostatecznie zmniejszona do 0, poświęca całej transakcji zewnętrznych.Ponieważ transaction_name jest ignorowany przez Aparat baz danych, wydanie zatwierdzenia transakcji, odwoływanie się do nazwy transakcji zewnętrznych, gdy istnieją zaległe transakcje wewnętrzne tylko Dekrementuje @@ TRANCOUNT przez 1.

Wydawanie zatwierdzenia transakcji, gdy @@ TRANCOUNT jest 0 wyniki w błąd; nie ma żadnych odpowiednich instrukcji BEGIN TRANSACTION.

Nie można z wycofać transakcji po wydaniu zatwierdzenia transakcji instrukcja , ponieważ wprowadzono modyfikacji danych stałą częścią bazy danych.

Aparat baz danych w SQL Server 2000 i później rośnie liczba transakcji w ramach instrukcja tylko wtedy, gdy liczba transakcji jest równa 0 w chwili rozpoczęcia instrukcja.W SQL Serverwwersja 7.0, transakcja licznik jest zwiększany zawsze niezależnie od liczby transakcji w chwili rozpoczęcia instrukcja. Może to powodować wartość zwracana przez @@ TRANCOUNT w wyzwalacze są niższe w SQL Server 2000 i później, niż jest w SQL Serverwwersja 7.0.

W SQL Server 2000 i później, jeśli zatwierdzenie transakcji lub ZATWIERDZIĆ pracy instrukcja jest wykonywana w wyzwalacz i ma odpowiednie jawny lub niejawny instrukcji BEGIN TRANSACTION instrukcja na początku wyzwalacza, użytkownicy mogą widzieć różne zachowanie niż w SQL Serverwwersja 7.0. Nie zaleca się umieszczanie ZATWIERDZIĆ transakcji lub ZATWIERDZIĆ pracy instrukcji w wyzwalacza.

Uprawnienia

Wymaga członkostwa w public rolę.

Przykłady

A.Zatwierdzanie transakcji

W następującym przykładzie usunięto kandydat zadanie .

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

B.Zatwierdzanie transakcji zagnieżdżonych

Poniższy przykład tworzy tabela, generuje trzy poziomy transakcji zagnieżdżonych i zatwierdza transakcji zagnieżdżonych.Chociaż każdy COMMIT TRANSACTION instrukcja zawiera transaction_name parametru, nie ma żadnego związku między COMMIT TRANSACTION i BEGIN TRANSACTION instrukcji.transaction_name Parametry są po prostu czytelności pomocy dla programisty, upewnij się, że prawidłowego numeru zatwierdzenia są zakodowane zmniejszyć pomoc @@TRANCOUNT 0 i tym samym zatwierdzanie transakcji zewnętrznych.

USE AdventureWorks2008R2;
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