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
Oznacza koniec pomyślnej transakcji niejawnej lub jawnej. Jeśli @@TRANCOUNT wartość to 1, COMMIT TRANSACTION wprowadza wszystkie modyfikacje danych od początku transakcji stałą część bazy danych, zwalnia zasoby transakcji i dekrementuje @@TRANCOUNT wartość 0. Gdy @@TRANCOUNT wartość jest większa niż 1, dekrementuje COMMIT TRANSACTION tylko wartość 1, @@TRANCOUNT a transakcja pozostaje aktywna.
Transact-SQL konwencje składni
Syntax
Syntax for SQL Server, Azure SQL Database, SQL database in Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Składnia magazynu danych sieci szkieletowej, usługi Azure Synapse Analytics i równoległej bazy danych magazynu danych.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Dotyczy do: SQL Server, Azure SQL Database, SQL database in Microsoft Fabric.
Ignorowane przez aparat bazy danych programu SQL Server.
transaction_name określa nazwę transakcji przypisaną przez poprzedni BEGIN TRANSACTIONelement .
transaction_namemusi być zgodna z regułami identyfikatorów, ale nie może przekraczać 32 znaków.
transaction_name wskazuje programistom, z którymi zagnieżdżona jest skojarzona BEGIN TRANSACTIONCOMMIT TRANSACTION .
@tran_name_variable
Dotyczy do: SQL Server, Azure SQL Database, SQL database in Microsoft Fabric.
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. Jeśli do zmiennej jest przekazywanych więcej niż 32 znaki, używane są tylko 32 znaki. Pozostałe znaki są obcinane.
WITH DELAYED_DURABILITY = { OFF | WŁ. }
Dotyczy do: SQL Server, Azure SQL Database, SQL database in Microsoft Fabric.
Opcja żądającą tego transakcji powinna zostać zatwierdzona z opóźnionym trwałością. Żądanie jest ignorowane, jeśli baza danych została zmieniona za pomocą DELAYED_DURABILITY = DISABLED polecenia lub DELAYED_DURABILITY = FORCED. Aby uzyskać więcej informacji, zobacz Kontrola Trwałości Transakcji.
Remarks
Jest to odpowiedzialność programisty Transact-SQL wystawiać COMMIT TRANSACTION tylko w momencie, gdy wszystkie dane, do których odwołuje się transakcja, są logicznie poprawne.
Jeśli transakcja zatwierdzona była Transact-SQL transakcji rozproszonej, COMMIT TRANSACTION wyzwala usługę MS DTC, aby użyć dwufazowego protokołu zatwierdzania w celu zatwierdzenia wszystkich serwerów zaangażowanych w transakcję. Gdy transakcja lokalna obejmuje co najmniej dwie bazy danych w tym samym wystąpieniu aparatu bazy danych, wystąpienie używa wewnętrznego zatwierdzenia dwufazowego w celu zatwierdzenia wszystkich baz danych zaangażowanych w transakcję.
W przypadku użycia w transakcjach zagnieżdżonych zatwierdzenia transakcji wewnętrznych nie zwalniają zasobów ani nie tworzą trwałych modyfikacji. Modyfikacje danych są wprowadzane na stałe i zasoby zwalniane tylko wtedy, gdy transakcja zewnętrzna zostanie zatwierdzona. Każdy COMMIT TRANSACTION wystawiony, gdy @@TRANCOUNT jest większy niż jeden po prostu dekrementuje @@TRANCOUNT o 1. Gdy @@TRANCOUNT wartość zostanie ostatecznie zdekrementowana na 0, cała zewnętrzna transakcja zostanie zatwierdzona. Ponieważ transaction_name jest ignorowany przez aparat bazy danych, wystawiając COMMIT TRANSACTION odwołanie do nazwy transakcji zewnętrznej, gdy istnieją zaległe transakcje wewnętrzne tylko dekrementuje @@TRANCOUNT o 1.
Wystawianie parametru COMMIT TRANSACTION , gdy @@TRANCOUNT wartość jest równa zero powoduje błąd; nie ma odpowiedniego BEGIN TRANSACTIONelementu .
Nie można wycofać transakcji po wydaniu COMMIT TRANSACTION instrukcji, ponieważ modyfikacje danych zostały wprowadzone w stałej części bazy danych.
Aparat bazy danych zwiększa liczbę transakcji w ramach instrukcji tylko wtedy, gdy liczba transakcji wynosi 0 na początku instrukcji.
Permissions
Wymaga członkostwa w publicznej roli .
Examples
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
A. Zatwierdzanie transakcji
Dotyczy: SQL Server, Azure SQL Database, Azure Synapse Analytics i Analytics Platform System (PDW)
Poniższy przykład usuwa kandydata do pracy.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Zatwierdzanie zagnieżdżonej transakcji
Dotyczy do: SQL Server, Azure SQL Database, SQL database in Microsoft Fabric.
Poniższy przykład tworzy tabelę, generuje trzy poziomy zagnieżdżonych transakcji, a następnie zatwierdza zagnieżdżonych transakcji. Mimo że każda COMMIT TRANSACTION instrukcja ma parametr transaction_name , nie ma relacji między instrukcjami COMMIT TRANSACTION i BEGIN TRANSACTION . Parametry transaction_name pomagają programisty upewnić się, że prawidłowa liczba zatwierdzeń jest kodowana w celu dekrementacji @@TRANCOUNT do 0 i tak, aby zatwierdzić transakcję zewnętrzną.
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;
PRINT N'Transaction count after BEGIN OuterTran = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (1, 'aaa');
-- This statement sets @@TRANCOUNT to 2.
BEGIN TRANSACTION Inner1;
PRINT N'Transaction count after BEGIN Inner1 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (2, 'bbb');
-- This statement sets @@TRANCOUNT to 3.
BEGIN TRANSACTION Inner2;
PRINT N'Transaction count after BEGIN Inner2 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (3, 'ccc');
-- This statement decrements @@TRANCOUNT to 2.
-- Nothing is committed.
COMMIT TRANSACTION Inner2;
PRINT N'Transaction count after COMMIT Inner2 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
-- This statement decrements @@TRANCOUNT to 1.
-- Nothing is committed.
COMMIT TRANSACTION Inner1;
PRINT N'Transaction count after COMMIT Inner1 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
-- This statement decrements @@TRANCOUNT to 0 and
-- commits outer transaction OuterTran.
COMMIT TRANSACTION OuterTran;
PRINT N'Transaction count after COMMIT OuterTran = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));