Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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)