Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
Lager i Microsoft Fabric
SQL-databas i Microsoft Fabric
Sätter BEGIN TRANSACTION läget till implicit, för anslutningen.
Transact-SQL syntaxkonventioner
Syntax
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Anmärkningar
När ON, är systemet i implicit transaktionsläge. Detta innebär att om @@TRANCOUNT = 0, något av följande Transact-SQL uttalanden startar en ny transaktion. Det motsvarar att en osedd BEGIN TRANSACTION avrättas först:
ALTER TABLEBEGIN TRANSACTIONCREATEDELETEDROPFETCHGRANTINSERTMERGEOPENREVOKE-
SELECT(Se förtydligande kommentar) TRUNCATE TABLEUPDATE
När OFF, är var och en av de föregående T-SQL-satserna begränsad av ett osedd och ett osedd BEGIN TRANSACTIONCOMMIT TRANSACTION sats. När OFF, säger vi att transaktionsläget är autocommit. Om din T-SQL-kod synligt ger en BEGIN TRANSACTION, säger vi att transaktionsläget är explicit.
Det finns flera förtydligande punkter att förstå:
När transaktionsläget är implicit utfärdas inget osett
BEGIN TRANSACTIONom det@@TRANCOUNT > 0redan är möjligt. Dock ökar alla explicitaBEGIN TRANSACTIONpåståenden fortfarande@@TRANCOUNT.När dina
INSERTkontoutdrag och allt annat i din arbetsenhet är klart, måste du skrivaCOMMIT TRANSACTIONut konton tills@@TRANCOUNTde åter minskas till 0. Eller så kan du ge ut en.ROLLBACK TRANSACTION
SELECTUttalanden som inte väljer från en tabell startar inte implicita transaktioner. Till exempel,SELECT GETDATE();ellerSELECT 1, 'ABC';kräver inga transaktioner.Implicita transaktioner kan oväntat bero
ONpå ANSI:s betalningsinställelser. För detaljer, se SET ANSI_DEFAULTS.Att ställa in
IMPLICIT_TRANSACTIONSpåONär inte populärt. I de flesta fall därIMPLICIT_TRANSACTIONSärON, beror det påSET ANSI_DEFAULTS ONatt var satt.SQL Server Native Client OLE DB Provider för SQL Server, och SQL Server Native Client ODBC-drivrutinen, är automatiskt inställda
IMPLICIT_TRANSACTIONSpåOFFvid anslutning. StällIMPLICIT_TRANSACTIONSin standardinställningar tillOFFför anslutningar med den SQLClient-hanterade leverantören och för SOAP-förfrågningar som tas emot via HTTP-endpoints.
För att se den aktuella inställningen för IMPLICIT_TRANSACTIONS, kör följande fråga.
DECLARE @IMPLICIT_TRANSACTIONS AS VARCHAR (3) = 'OFF';
IF ((2 & @@OPTIONS) = 2)
SET @IMPLICIT_TRANSACTIONS = 'ON';
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;
Examples
Följande Transact-SQL skript kör några olika testfall. Textutdata tillhandahålls också, som visar detaljerat beteende och resultat från varje testfall.
-- 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
Nästa är textutmatningen från föregående Transact-SQL skript.
-------- [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
Relaterat innehåll
- ALTER TABLE (Transact-SQL)
- STARTA TRANSAKTION (Transact-SQL)
- SKAPA TABELL (Transact-SQL)
- TA BORT (Transact-SQL)
- DROP-TABELL (Transact-SQL)
- HÄMTA (Transact-SQL)
- BIDRAG (Transact-SQL)
- INFOGA (Transact-SQL)
- SAMMANSLAGNING (Transact-SQL)
- ÖPPNA (Transact-SQL)
- ÅTERKALLA (Transact-SQL)
- SELECT (Transact-SQL)
- SET-instruktioner (Transact-SQL)
- STÄLL ANSI_DEFAULTS (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- TRUNKERA TABELL (Transact-SQL)
- UPPDATERING (Transact-SQL)