Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric
Zet de BEGIN TRANSACTION modus op impliciet, voor de verbinding.
Transact-SQL syntaxis-conventies
Syntaxis
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Opmerkingen
Wanneer ON, bevindt het systeem zich in impliciete transactiemodus. Dit betekent dat als @@TRANCOUNT = 0, elk van de volgende Transact-SQL statements een nieuwe transactie begint. Het is gelijk aan een onzichtbare BEGIN TRANSACTION executie als eerste:
ALTER TABLEBEGIN TRANSACTIONCREATEDELETEDROPFETCHGRANTINSERTMERGEOPENREVOKE-
SELECT(Zie verduidelijkende opmerking) TRUNCATE TABLEUPDATE
Wanneer OFF, wordt elk van de voorgaande T-SQL-instructies begrensd door een onzichtbare BEGIN TRANSACTION en een onzichtbare COMMIT TRANSACTION instructie. Wanneer OFF, zeggen we dat de transactiemodus autocommit is. Als je T-SQL-code zichtbaar een BEGIN TRANSACTIONuitgeeft, zeggen we dat de transactiemodus expliciet is.
Er zijn verschillende verduidelijkende punten om te begrijpen:
Wanneer de transactiemodus impliciet is, wordt er geen onzichtbaar
BEGIN TRANSACTIONuitgegeven als@@TRANCOUNT > 0al. Echter, expliciete uitsprakenBEGIN TRANSACTIONverhogen nog steeds@@TRANCOUNT.Wanneer je
INSERTstatements en alles wat verder in je werkunit is afgerond, moet je statements afgevenCOMMIT TRANSACTIONtotdat@@TRANCOUNThet weer teruggebracht is naar 0. Of je kunt er eenROLLBACK TRANSACTIONuitgeven.
SELECTStatements die niet uit een tabel selecteren, starten geen impliciete transacties. Bijvoorbeeld,SELECT GETDATE();ofSELECT 1, 'ABC';geen transacties vereisen.Impliciete transacties kunnen onverwacht het gevolg zijn
ONvan wanbetalingen van ANSI. Voor details, zie SET ANSI_DEFAULTS.Instellen
IMPLICIT_TRANSACTIONSisONniet populair. In de meeste gevallen waarIMPLICIT_TRANSACTIONSisON, komt dat omdatSET ANSI_DEFAULTS ONhet was ingesteld.De SQL Server Native Client OLE DB Provider voor SQL Server, en de SQL Server Native Client ODBC-driver, worden automatisch ingesteld
IMPLICIT_TRANSACTIONSopOFFbij het verbinden. StelIMPLICIT_TRANSACTIONSstandaardinstellingen in voorOFFverbindingen met de beheerde SQLClient-provider, en voor SOAP-verzoeken die via HTTP-endpoints worden ontvangen.
Om de huidige instelling voor IMPLICIT_TRANSACTIONSte bekijken, voer je de volgende query uit.
DECLARE @IMPLICIT_TRANSACTIONS AS VARCHAR (3) = 'OFF';
IF ((2 & @@OPTIONS) = 2)
SET @IMPLICIT_TRANSACTIONS = 'ON';
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;
Voorbeelden
Het volgende Transact-SQL script voert een paar verschillende testgevallen uit. De tekstuitvoer wordt ook geleverd, die het gedetailleerde gedrag en de resultaten van elk testgeval toont.
-- 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
Vervolgens volgt de tekstuitvoer van het voorgaande Transact-SQL script.
-------- [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
Verwante inhoud
- ALTER TABLE (Transact-SQL)
- BEGIN TRANSACTIE (Transact-SQL)
- MAAK TABEL AAN (Transact-SQL)
- VERWIJDEREN (Transact-SQL)
- DROP-TABEL (Transact-SQL)
- APPORTEREN (Transact-SQL)
- SUBSIDIE (Transact-SQL)
- INVOEGEN (Transact-SQL)
- SAMENVOEGEN (Transact-SQL)
- OPEN (Transact-SQL)
- INTREKKEN (Transact-SQL)
- SELECT (Transact-SQL)
- SET-instructies (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- AFSNIJD TABEL (Transact-SQL)
- UPDATE (Transact-SQL)