Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLAzure Synapse Analytics
PdW (Analytics Platform System)
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Nastaví BEGIN TRANSACTION režim na implicitní, pro spojení.
Syntaxe
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Poznámky
Když ON, systém je v implicitním transakčním režimu. To znamená, že pokud @@TRANCOUNT = 0, některý z následujících Transact-SQL příkazů zahájí novou transakci. Je to ekvivalent toho, když je neviditelný BEGIN TRANSACTION popraven jako první:
ALTER TABLEBEGIN TRANSACTIONCREATEDELETEDROPFETCHGRANTINSERTMERGEOPENREVOKE-
SELECT(Viz upřesňující poznámka) TRUNCATE TABLEUPDATE
Když OFF, každý z předchozích T-SQL příkazů je omezen příkazem neviditelným BEGIN TRANSACTION a neviditelným COMMIT TRANSACTION . Když OFF, říkáme, že režim transakce je automaticky commit. Pokud váš T-SQL kód viditelně vydává , BEGIN TRANSACTIONříkáme, že transakční režim je explicitní.
Existuje několik upřesňujících bodů, které je třeba pochopit:
Když je transakční režim implicitní, neuděluje se žádný neviditelný
BEGIN TRANSACTIONpříkaz, pokud@@TRANCOUNT > 0již existuje. Nicméně jakákoli explicitníBEGIN TRANSACTIONtvrzení stále inkrementují@@TRANCOUNT.Když jsou
INSERTvaše výpisy a vše ostatní v rámci vaší pracovní jednotky hotové, musíte vydatCOMMIT TRANSACTIONvýkazy, dokud@@TRANCOUNTse nevrátí zpět na 0. Nebo můžete vydat nějakouROLLBACK TRANSACTIONžádost.
SELECTPříkazy, které nevyberou z tabulky, nespouštějí implicitní transakce. NapříkladSELECT GETDATE();SELECT 1, 'ABC';nebo nevyžadují transakce.Implicitní transakce mohou být nečekaně způsobeny
ONnesplácením ANSI. Podrobnosti viz SET ANSI_DEFAULTS.Nastavení
IMPLICIT_TRANSACTIONSneníONpopulární. Ve většině případů, kdeIMPLICIT_TRANSACTIONSjeON, je to proto, žeSET ANSI_DEFAULTS ONbylo nastaveno.SQL Server Native Client OLE DB Provider pro SQL Server a SQL Server Native Client ODBC ovladač jsou automaticky nastaveny
IMPLICIT_TRANSACTIONSpřiOFFpřipojení. NastavteIMPLICIT_TRANSACTIONSvýchozí proOFFpřipojení s spravovaným poskytovatelem SQLClient a pro SOAP požadavky přijaté přes HTTP endpointy.
Pro zobrazení aktuálního nastavení pro IMPLICIT_TRANSACTIONS, spusť následující dotaz.
DECLARE @IMPLICIT_TRANSACTIONS AS VARCHAR (3) = 'OFF';
IF ((2 & @@OPTIONS) = 2)
SET @IMPLICIT_TRANSACTIONS = 'ON';
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;
Examples
Následující Transact-SQL skript spouští několik různých testovacích případů. K dispozici je také textový výstup, který ukazuje podrobné chování a výsledky z každého testovacího případu.
-- 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
Dále je na řadě textový výstup z předchozího Transact-SQL písma.
-------- [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
Související obsah
- ZMĚNIT TABULKU (Transact-SQL)
- ZAČÁTEK TRANSAKCE (Transact-SQL)
- VYTVOŘIT TABULKU (Transact-SQL)
- DELETE (Transact-SQL)
- DROP TABLE (Transact-SQL)
- APORTUJ (Transact-SQL)
- GRANT (Transact-SQL)
- INSERT (Transact-SQL)
- MERGE (Transact-SQL)
- OTEVŘÍT (Transact-SQL)
-
ODVOLÁNÍ (Transact-SQL) - SELECT (Transact-SQL)
- Příkazy SET (Transact-SQL)
- NASTAVTE ANSI_DEFAULTS (Transact-SQL)
-
@@TRANCOUNT (Transact-SQL) - ZKRÁCENÝ STŮL (Transact-SQL)
- AKTUALIZACE (Transact-SQL)