Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
A BEGIN TRANSACTION módot implicit módra állítja a kapcsolathoz.
Transact-SQL szintaxis konvenciók
Szemantika
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Megjegyzések
Amikor ON, a rendszer implicit tranzakciós üzemmódban van. Ez azt jelenti, hogy ha @@TRANCOUNT = 0, az alábbi Transact-SQL állítások közül bármelyik új tranzakciót indít. Ez egyenértékű azzal, mintha egy láthatatlan BEGIN TRANSACTION lényt végeznének ki először:
ALTER TABLEBEGIN TRANSACTIONCREATEDELETEDROPFETCHGRANTINSERTMERGEOPENREVOKE-
SELECT(Lásd a tisztázó megjegyzést) TRUNCATE TABLEUPDATE
Amikor OFF, az előző T-SQL utasítások mindegyike egy láthatatlan BEGIN TRANSACTION és egy láthatatlan COMMIT TRANSACTION utasítás határolja. Amikor OFF, azt mondjuk, hogy a tranzakciós mód automatikus commit. Ha a T-SQL kódod láthatóan kiad, akkor BEGIN TRANSACTIONazt mondjuk, hogy a tranzakciós mód explicit.
Több tisztázó pontot kell megérteni:
Ha a tranzakciós mód implicit, nem jelenik meg nem
BEGIN TRANSACTIONlátott, ha@@TRANCOUNT > 0már létezik. Azonban minden explicitBEGIN TRANSACTIONállítás továbbra is növeli@@TRANCOUNTa .Amikor a
INSERTkimutatásaid és minden más a munkaterületedben elkészült, ki kell adnodCOMMIT TRANSACTIONa nyilatkozatokat, amíg@@TRANCOUNTvissza nem csökkentik a nullára. Vagy kiadhatsz egyetROLLBACK TRANSACTION.
SELECTazok az állítások, amelyek nem választanak ki egy táblából, nem indítanak implicit tranzakciókat. Például,SELECT GETDATE();vagySELECT 1, 'ABC';nem kell tranzakciót.Az implicit tranzakciók váratlanul ANSI alapértelmezett későzések miatt alakulhatnak
ONki. Részletekért lásd a SET ANSI_DEFAULTS.A beállítás
IMPLICIT_TRANSACTIONSONnem népszerű. A legtöbb esetben, aholIMPLICIT_TRANSACTIONSvanON, az azért van, mertSET ANSI_DEFAULTS ONbeállították.Az SQL Server Native Client OLE DB Provider for SQL Server és az SQL Server Native Client ODBC illevezetője automatikusan beállítható
IMPLICIT_TRANSACTIONSOFFa csatlakozáskor. ÁllítsukIMPLICIT_TRANSACTIONSbe az alapértelmezéseketOFFaz SQLClient menedzselt szolgáltatóval való kapcsolatokhoz, valamint a HTTP végpontokon keresztül érkező SOAP kérésekhez.
A jelenlegi beállítás IMPLICIT_TRANSACTIONSmegtekintéséhez futasd le a következő lekérdezést.
DECLARE @IMPLICIT_TRANSACTIONS AS VARCHAR (3) = 'OFF';
IF ((2 & @@OPTIONS) = 2)
SET @IMPLICIT_TRANSACTIONS = 'ON';
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;
Példák
A következő Transact-SQL szkript több különböző tesztesetet futtat. A szöveges kimenet is elérhető, amely bemutatja a tesztesetek részletes viselkedését és eredményeit.
-- 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
Ezután jön az előző Transact-SQL szkriptből származó szövegkimenet.
-------- [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
Kapcsolódó tartalom
- ALTERNATÍV TÁBLÁZAT (Transact-SQL)
- TRANZAKCIÓ INDÍTÁSA (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- TÖRLÉS (Transact-SQL)
- DROP TABLE (Transact-SQL)
- HOZNI (Transact-SQL)
- TÁMOGATÁS (Transact-SQL)
- BEHELYEZKEDÉS (Transact-SQL)
- ÖSSZEOLVADÁS (Transact-SQL)
- NYISD (Transact-SQL)
- VISSZAVONÁS (Transact-SQL)
- VÁLASZT (Transact-SQL)
- SET-utasítások (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- TRUNCATE TABLE (Transact-SQL)
- FRISSÍTÉS (Transact-SQL)