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 @@TRANCOUNT się o 1, COMMIT TRANSACTION a transakcja pozostaje aktywna.
Transact-SQL konwencje składni
Syntax
Składnia dla programu SQL Server, usługi Azure SQL Database, usługi Azure SQL Managed Instance, bazy danych SQL w usłudze 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: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database w usłudze Microsoft Fabric.
Ignorowane przez aparat bazy danych po określeniu za pomocą COMMITpolecenia .
transaction_name określa nazwę transakcji przypisaną przez poprzedni BEGIN TRANSACTIONelement .
transaction_name musi być zgodna z regułami identyfikatorów, ale nie może przekraczać 32 znaków.
transaction_name można użyć jako techniki dokumentacji kodu, aby wskazać, z którymi instrukcjami COMMIT TRANSACTION wewnętrznymi BEGIN TRANSACTION jest skojarzona instrukcja.
@tran_name_variable
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database w usłudze 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 pierwsze 32 znaki. Pozostałe znaki są obcinane.
WITH DELAYED_DURABILITY = { OFF | WŁ. }
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database w usłudze Microsoft Fabric.
Opcja, która żąda zatwierdzenia tej transakcji z opóźnionym trwałością. Żądanie jest ignorowane, jeśli opóźniona trwałość jest wyłączona dla bazy danych. Transakcja jest zatwierdzana z opóźnieniem trwałości niezależnie od tej opcji, jeśli opóźniona trwałość jest wymuszana dla bazy danych.
Aby uzyskać więcej informacji, zobacz Kontrola Trwałości Transakcji.
Remarks
Obowiązkiem aplikacji jest wystawianie COMMIT TRANSACTION w momencie, gdy wszystkie dane, do których odwołuje się transakcja, osiągną zamierzony stan spójności.
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 transakcji na wszystkich serwerach 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 transakcji we wszystkich bazach danych zaangażowanych w transakcję.
W przypadku transakcji wewnętrznych zatwierdzenie nie zwalnia zasobów ani nie wprowadza trwałych modyfikacji danych. Modyfikacje danych są trwałe, a zasoby są zwalniane tylko wtedy, gdy transakcja zewnętrzna zostanie zatwierdzona. Każdy COMMIT TRANSACTION wystawiony, gdy @@TRANCOUNT jest większy niż 1 dekrementuje @@TRANCOUNT o 1, ale nie ma innych efektów. Gdy @@TRANCOUNT wartość zostanie ostatecznie zdekrementowana na 0, cała zewnętrzna transakcja zostanie zatwierdzona. Ponieważ transaction_name określony COMMIT TRANSACTION za pomocą 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 się o 1.
Wystawianie parametru COMMIT TRANSACTION , gdy @@TRANCOUNT wartość jest równa zero powoduje błąd, ponieważ nie ma odpowiadającego mu BEGIN TRANSACTIONelementu .
Nie można wycofać transakcji po wydaniu COMMIT TRANSACTION instrukcji, ponieważ modyfikacje danych są już stałą częścią bazy danych.
Uwaga / Notatka
Aparat bazy danych nie obsługuje niezależnie zarządzanych zagnieżdżonych transakcji. Zatwierdzenie wewnętrznego dekrementowania @@TRANCOUNT transakcji, ale nie ma innych efektów. Wycofanie transakcji wewnętrznej zawsze cofa zewnętrzną transakcję, chyba że istnieje punkt zapisywania i jest określony w instrukcji ROLLBACK .
Permissions
Wymaga członkostwa w public 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 SQL Managed Instance, BAZA danych SQL w usłudze Microsoft Fabric, Azure Synapse Analytics, 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 transakcji zewnętrznej i transakcji wewnętrznych
Dotyczy: SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database w usłudze Microsoft Fabric.
Poniższy przykład tworzy tabelę, uruchamia zewnętrzne i dwie transakcje wewnętrzne, a następnie zatwierdza każdą transakcję. Parametry transaction_name używane w tym przykładzie pomagają deweloperowi upewnić się, że prawidłowa liczba zatwierdzeń jest kodowana w celu dekrementacji @@TRANCOUNT wartości 0 i zatwierdzenia transakcji zewnętrznej.
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));
Treści powiązane
- ROZPOCZYNANIE TRANSAKCJI ROZPROSZONEJ (Transact-SQL)
- ROZPOCZNIJ TRANSAKCJĘ (Transact-SQL)
- ZAANGAŻUJ PRACĘ (Transact-SQL)
- WYCOFYWANIA TRANSAKCJI (Transact-SQL)
- WYCOFYWANIE PRACY (Transact-SQL)
- ZAPISZ TRANSAKCJĘ (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- Przewodnik dotyczący blokowania transakcji i wersjonowania wierszy