Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureAzure Synapse Analytics
Система платформы аналитики (PDW)
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Отмечает успешное завершение явной или неявной транзакции. Если @@TRANCOUNT значение равно 1, COMMIT TRANSACTION выполняет все изменения данных с момента начала транзакции постоянной частью базы данных, освобождает ресурсы транзакции и уменьшается @@TRANCOUNT до 0. Если @@TRANCOUNT значение больше 1, уменьшается COMMIT TRANSACTION только на 1, @@TRANCOUNT а транзакция остается активной.
Соглашения о синтаксисе Transact-SQL
Syntax
Синтаксис для SQL Server, Azure SQL Database, SQL Database в Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Синтаксис для хранилища данных Fabric, Azure Synapse Analytics и базы данных параллельного хранилища данных.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Относится к: SQL Server, Azure SQL Database, SQL база данных в Microsoft Fabric.
Игнорируется ядро СУБД SQL Server.
transaction_name указывает имя транзакции, назначенное предыдущимBEGIN TRANSACTION. Аргумент transaction_name должен соответствовать правилам для идентификаторов, но его длина не может превышать 32 символа.
transaction_name указывает программистам, с которым BEGIN TRANSACTIONCOMMIT TRANSACTION связано вложение.
@tran_name_variable
Относится к: SQL Server, Azure SQL Database, SQL база данных в Microsoft Fabric.
Имя определяемой пользователем переменной, содержащей допустимое имя транзакции. Переменная должна быть объявлена с типом данных char, varchar, nchar или nvarchar. Если в переменную передаются более 32 символов, используются только 32 символа. Остальные символы усечены.
С DELAYED_DURABILITY = { OFF | ON }
Относится к: SQL Server, Azure SQL Database, SQL база данных в Microsoft Fabric.
Параметр, который запрашивает эту транзакцию, должен фиксироваться с задержанной устойчивостью. Запрос игнорируется, если база данных была изменена или DELAYED_DURABILITY = DISABLEDDELAYED_DURABILITY = FORCED. Дополнительные сведения см. в разделе Управление устойчивостью транзакций.
Remarks
Это ответственность программиста Transact-SQL выдавать COMMIT TRANSACTION только в момент, когда все данные, на которые ссылается транзакция, логически правильны.
Если транзакция зафиксирована была распределенной транзакцией Transact-SQL, COMMIT TRANSACTION активирует MS DTC для использования протокола двухэтапной фиксации для фиксации всех серверов, участвующих в транзакции. Если локальная транзакция охватывает две или несколько баз данных в одном экземпляре ядро СУБД, экземпляр использует внутреннюю двухфазную фиксацию для фиксации всех баз данных, участвующих в транзакции.
При использовании вложенных транзакций фиксация внутренних транзакций не освобождает ресурсы и не делает их изменения постоянными. Изменения данных становятся постоянными и ресурсы освобождаются только при фиксации внешней транзакции. Каждый COMMIT TRANSACTION выдается, когда @@TRANCOUNT больше одного просто уменьшается @@TRANCOUNT на 1. Когда @@TRANCOUNT окончательно уменьшается до 0, все внешние транзакции фиксируются. Так как transaction_name игнорируется ядро СУБД, выдав COMMIT TRANSACTION ссылку на имя внешней транзакции, если есть невыполненные внутренние транзакции только на @@TRANCOUNT 1.
COMMIT TRANSACTION
@@TRANCOUNT При выполнении ноль приводит к ошибке; соответствующая BEGIN TRANSACTIONошибка отсутствует.
Вы не можете откатить транзакцию после COMMIT TRANSACTION выдачи инструкции, так как изменения данных были сделаны постоянной частью базы данных.
Ядро СУБД увеличивает число транзакций в операторе, только если число транзакций равно 0 в начале инструкции.
Permissions
Необходимо быть членом роли public.
Examples
Примеры кода в этой статье используют базу данных образца AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.
A. Фиксация транзакции
Область применения: SQL Server, База данных SQL Azure, Azure Synapse Analytics и Analytics Platform System (PDW)
В следующем примере удаляется кандидат на вакансию.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Фиксация вложенной транзакции
Относится к: SQL Server, Azure SQL Database, SQL база данных в Microsoft Fabric.
В следующем примере создается таблица и формируется три уровня вложенных транзакций, которые затем фиксируются. Хотя каждая инструкция COMMIT TRANSACTION имеет параметр transaction_name, связи между инструкциями COMMIT TRANSACTION и BEGIN TRANSACTION не существует. Параметры transaction_name позволяют программисту удостовериться в том, что закодировано правильное количество фиксаций, необходимое для того, чтобы уменьшить значение @@TRANCOUNT до 0 и таким образом зафиксировать внешнюю транзакцию.
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));