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
Mengatur BEGIN TRANSACTION mode ke implisit, untuk koneksi.
Sintaks
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Keterangan
Ketika ON, sistem dalam mode transaksi implisit. Artinya, jika @@TRANCOUNT = 0, salah satu pernyataan Transact-SQL berikut memulai transaksi baru. Ini setara dengan yang tidak terlihat BEGIN TRANSACTION dieksekusi terlebih dahulu:
ALTER TABLEBEGIN TRANSACTIONCREATEDELETEDROPFETCHGRANTINSERTMERGEOPENREVOKE-
SELECT(Lihat komentar klarifikasi) TRUNCATE TABLEUPDATE
Ketika OFF, masing-masing pernyataan T-SQL sebelumnya dibatasi oleh pernyataan yang tidak terlihat BEGIN TRANSACTION dan tidak terlihat COMMIT TRANSACTION . Ketika OFF, kami mengatakan mode transaksi adalah autocommit. Jika kode T-SQL Anda terlihat mengeluarkan , BEGIN TRANSACTIONkami mengatakan mode transaksi eksplisit.
Ada beberapa poin klarifikasi untuk dipahami:
Ketika mode transaksi implisit, tidak ada yang tidak terlihat
BEGIN TRANSACTIONyang dikeluarkan jika@@TRANCOUNT > 0sudah. Namun, setiap pernyataan eksplisitBEGIN TRANSACTIONmasih bertambah@@TRANCOUNT.Ketika pernyataan Anda
INSERTdan apa pun dalam unit kerja Anda selesai, Anda harus mengeluarkanCOMMIT TRANSACTIONpernyataan sampai@@TRANCOUNTditurunkan kembali ke 0. Atau Anda dapat menerbitkannyaROLLBACK TRANSACTION.
SELECTpernyataan yang tidak dipilih dari tabel tidak memulai transaksi implisit. Misalnya,SELECT GETDATE();atauSELECT 1, 'ABC';tidak memerlukan transaksi.Transaksi implisit mungkin secara tak terduga
ONdisebabkan oleh default ANSI. Untuk detailnya, lihat SET ANSI_DEFAULTS.Pengaturan
IMPLICIT_TRANSACTIONSkeONtidak populer. Dalam kebanyakan kasus di manaIMPLICIT_TRANSACTIONS,ONitu karenaSET ANSI_DEFAULTS ONtelah diatur.Penyedia OLE DB Klien Asli SQL Server untuk SQL Server, dan driver ODBC Klien Asli SQL Server, secara otomatis diatur
IMPLICIT_TRANSACTIONSkeOFFsaat terhubung. AturIMPLICIT_TRANSACTIONSdefault keOFFuntuk koneksi dengan penyedia terkelola SQLClient, dan untuk permintaan SOAP yang diterima melalui titik akhir HTTP.
Untuk melihat pengaturan saat ini untuk IMPLICIT_TRANSACTIONS, jalankan kueri berikut.
DECLARE @IMPLICIT_TRANSACTIONS AS VARCHAR (3) = 'OFF';
IF ((2 & @@OPTIONS) = 2)
SET @IMPLICIT_TRANSACTIONS = 'ON';
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;
Contoh
Skrip Transact-SQL berikut menjalankan beberapa kasus pengujian yang berbeda. Output teks juga disediakan, yang menunjukkan perilaku terperinci dan hasil dari setiap kasus pengujian.
-- Preparations.
SET NOCOUNT ON;
SET IMPLICIT_TRANSACTIONS OFF;
GO
WHILE (@@TRANCOUNT > 0) COMMIT TRANSACTION;
GO
IF (OBJECT_ID(N'dbo.t1',N'U') IS NOT NULL) DROP TABLE dbo.t1;
GO
CREATE table dbo.t1 (a INT);
GO
PRINT N'-------- [Test A] ---- OFF ----';
PRINT N'[A.01] Now, SET IMPLICIT_TRANSACTIONS OFF.';
PRINT N'[A.02] @@TRANCOUNT, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
SET IMPLICIT_TRANSACTIONS OFF;
GO
INSERT INTO dbo.t1 VALUES (11);
INSERT INTO dbo.t1 VALUES (12);
PRINT N'[A.03] @@TRANCOUNT, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N' ';
PRINT N'-------- [Test B] ---- ON ----';
PRINT N'[B.01] Now, SET IMPLICIT_TRANSACTIONS ON.';
PRINT N'[B.02] @@TRANCOUNT, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
SET IMPLICIT_TRANSACTIONS ON;
GO
INSERT INTO dbo.t1 VALUES (21);
INSERT INTO dbo.t1 VALUES (22);
PRINT N'[B.03] @@TRANCOUNT, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
COMMIT TRANSACTION;
PRINT N'[B.04] @@TRANCOUNT, after COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N' ';
PRINT N'-------- [Test C] ---- ON, then BEGIN TRAN ----';
PRINT N'[C.01] Now, SET IMPLICIT_TRANSACTIONS ON.';
PRINT N'[C.02] @@TRANCOUNT, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
SET IMPLICIT_TRANSACTIONS ON;
GO
BEGIN TRANSACTION;
INSERT INTO dbo.t1 VALUES (31);
INSERT INTO dbo.t1 VALUES (32);
PRINT N'[C.03] @@TRANCOUNT, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
COMMIT TRANSACTION;
PRINT N'[C.04] @@TRANCOUNT, after a COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
COMMIT TRANSACTION;
PRINT N'[C.05] @@TRANCOUNT, after another COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N' ';
PRINT N'-------- [Test D] ---- ON, INSERT, BEGIN TRAN, INSERT ----';
PRINT N'[D.01] Now, SET IMPLICIT_TRANSACTIONS ON.';
PRINT N'[D.02] @@TRANCOUNT, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
SET IMPLICIT_TRANSACTIONS ON;
GO
INSERT INTO dbo.t1 VALUES (41);
BEGIN TRANSACTION;
INSERT INTO dbo.t1 VALUES (42);
PRINT N'[D.03] @@TRANCOUNT, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
COMMIT TRANSACTION;
PRINT N'[D.04] @@TRANCOUNT, after a COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
COMMIT TRANSACTION;
PRINT N'[D.05] @@TRANCOUNT, after another COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
-- Clean up.
SET IMPLICIT_TRANSACTIONS OFF;
GO
WHILE (@@TRANCOUNT > 0) COMMIT TRANSACTION;
GO
DROP TABLE dbo.t1;
GO
Selanjutnya adalah output teks dari skrip Transact-SQL sebelumnya.
-------- [Test A] ---- OFF ----
[A.01] Now, SET IMPLICIT_TRANSACTIONS OFF.
[A.02] @@TRANCOUNT, at start, == 0
[A.03] @@TRANCOUNT, after INSERTs, == 0
-------- [Test B] ---- ON ----
[B.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[B.02] @@TRANCOUNT, at start, == 0
[B.03] @@TRANCOUNT, after INSERTs, == 1
[B.04] @@TRANCOUNT, after COMMIT, == 0
-------- [Test C] ---- ON, then BEGIN TRAN ----
[C.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[C.02] @@TRANCOUNT, at start, == 0
[C.03] @@TRANCOUNT, after INSERTs, == 2
[C.04] @@TRANCOUNT, after a COMMIT, == 1
[C.05] @@TRANCOUNT, after another COMMIT, == 0
-------- [Test D] ---- ON, INSERT, BEGIN TRAN, INSERT ----
[D.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[D.02] @@TRANCOUNT, at start, == 0
[D.03] @@TRANCOUNT, after INSERTs, == 2
[D.04] @@TRANCOUNT, after a COMMIT, == 1
[D.05] @@TRANCOUNT, after another COMMIT, == 0
Konten terkait
- ALTER TABLE (Transact-SQL)
- MULAI TRANSAKSI (Transact-SQL)
- BUAT TABEL (Transact-SQL)
- HAPUS (Transact-SQL)
- TABEL DROP (Transact-SQL)
- AMBIL (Transact-SQL)
- GRANT (T-SQL)
- SISIPKAN (Transact-SQL)
- GABUNG (Transact-SQL)
- BUKA (Transact-SQL)
- MENCABUT (Transact-SQL)
- PILIH (Transact-SQL)
- Pernyataan SET (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- @@TRANCOUNT (T-SQL)
- POTONG TABEL (Transact-SQL)
- UPDATE (Transact-SQL)