Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Menandai akhir transaksi implisit atau eksplisit yang berhasil. Jika @@TRANCOUNT adalah 1, COMMIT TRANSACTION buat semua modifikasi data sejak awal transaksi menjadi bagian permanen dari database, membebaskan sumber daya transaksi, dan penurunan @@TRANCOUNT ke 0. Ketika @@TRANCOUNT lebih besar dari 1, COMMIT TRANSACTION penurunan @@TRANCOUNT hanya dengan 1 dan transaksi tetap aktif.
Syntax
Sintaks untuk SQL Server, Azure SQL Database, database SQL di Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Sintaks untuk Fabric Data Warehouse, Azure Synapse Analytics, dan Parallel Data Warehouse Database.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Berlaku untuk: SQL Server, Azure SQL Database, database SQL di Microsoft Fabric.
Diabaikan oleh Mesin Database SQL Server.
transaction_name menentukan nama transaksi yang ditetapkan oleh sebelumnyaBEGIN TRANSACTION.
transaction_name harus sesuai dengan aturan untuk pengidentifikasi, tetapi tidak boleh melebihi 32 karakter.
transaction_name menunjukkan kepada pemrogram yang berlapis BEGIN TRANSACTIONCOMMIT TRANSACTION yang terkait dengannya.
@tran_name_variable
Berlaku untuk: SQL Server, Azure SQL Database, database SQL di Microsoft Fabric.
Nama variabel yang ditentukan pengguna yang berisi nama transaksi yang valid. Variabel harus dideklarasikan dengan jenis data char, varchar, nchar, atau nvarchar. Jika lebih dari 32 karakter diteruskan ke variabel, hanya 32 karakter yang digunakan. Karakter yang tersisa dipotong.
DENGAN DELAYED_DURABILITY = { OFF | AKTIF }
Berlaku untuk: SQL Server, Azure SQL Database, database SQL di Microsoft Fabric.
Opsi yang meminta transaksi ini harus dilakukan dengan durabilitas tertunda. Permintaan diabaikan jika database diubah dengan DELAYED_DURABILITY = DISABLED atau DELAYED_DURABILITY = FORCED. Untuk informasi selengkapnya, lihat Mengontrol Durabilitas Transaksi.
Remarks
Ini adalah tanggung jawab pemrogram Transact-SQL untuk mengeluarkan COMMIT TRANSACTION hanya pada titik ketika semua data yang direferensikan oleh transaksi secara logis benar.
Jika transaksi yang dilakukan adalah transaksi terdistribusi Transact-SQL, COMMIT TRANSACTION memicu MS DTC untuk menggunakan protokol penerapan dua fase untuk menerapkan semua server yang terlibat dalam transaksi. Saat transaksi lokal mencakup dua database atau lebih pada instans Mesin Database yang sama, instans menggunakan penerapan dua fase internal untuk menerapkan semua database yang terlibat dalam transaksi.
Saat digunakan dalam transaksi berlapis, penerapan transaksi dalam tidak membebaskan sumber daya atau membuat modifikasinya permanen. Modifikasi data dilakukan secara permanen dan sumber daya hanya dibeberkan ketika transaksi luar dilakukan. Masing-masing COMMIT TRANSACTION dikeluarkan ketika @@TRANCOUNT lebih besar dari satu keputusan @@TRANCOUNT saja dengan 1. Ketika @@TRANCOUNT akhirnya ditunda menjadi 0, seluruh transaksi luar dilakukan. Karena transaction_name diabaikan oleh Mesin Database, mengeluarkan COMMIT TRANSACTION referensi nama transaksi luar ketika ada transaksi dalam yang terutang hanya keputusan @@TRANCOUNT sebesar 1.
Mengeluarkan COMMIT TRANSACTION ketika @@TRANCOUNT nol menghasilkan kesalahan; tidak ada yang sesuai BEGIN TRANSACTION.
Anda tidak dapat mengembalikan transaksi setelah COMMIT TRANSACTION pernyataan dikeluarkan, karena modifikasi data dibuat sebagai bagian permanen dari database.
Mesin Database menaikkan jumlah transaksi dalam pernyataan hanya ketika jumlah transaksi adalah 0 di awal pernyataan.
Permissions
Memerlukan keanggotaan dalam peran publik .
Examples
Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.
A. Menerapkan transaksi
Berlaku untuk: SQL Server, Azure SQL Database, Azure Synapse Analytics, dan Analytics Platform System (PDW)
Contoh berikut menghapus kandidat pekerjaan.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Menerapkan transaksi berlapis
Berlaku untuk: SQL Server, Azure SQL Database, database SQL di Microsoft Fabric.
Contoh berikut membuat tabel, menghasilkan tiga tingkat transaksi berlapis, lalu melakukan transaksi berlapis. Meskipun setiap COMMIT TRANSACTION pernyataan memiliki parameter transaction_name , tidak ada hubungan antara COMMIT TRANSACTION pernyataan dan BEGIN TRANSACTION . Parameter transaction_name membantu programmer memastikan bahwa jumlah penerapan yang benar dikodekan ke @@TRANCOUNT 0 dan sebagainya untuk melakukan transaksi luar.
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));