Megosztás a következőn keresztül:


KEZDJE TRANZAKCIÓT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)Raktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Egy explicit, helyi tranzakció kiindulópontját jelöli meg. Az explicit tranzakciók az BEGIN TRANSACTION utasítással kezdődnek, és az vagy COMMIT utasítással ROLLBACK végződnek.

Transact-SQL szintaxis konvenciók

Syntax

Szintaxis az SQL Serverhez, az Azure SQL Database-hez, a Fabric SQL Database-hez és a felügyelt Azure SQL-példányhoz.

BEGIN { TRAN | TRANSACTION }
    [ { transaction_name | @tran_name_variable }
      [ WITH MARK [ 'description' ] ]
    ]
[ ; ]

A Fabric Data Warehouse, az Azure Synapse Analytics és az Analytics Platform System (PDW) szintaxisa.

BEGIN { TRAN | TRANSACTION }
[ ; ]

Arguments

transaction_name

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Fabric SQL Database és Felügyelt Azure SQL-példány

A tranzakcióhoz rendelt név. transaction_name meg kell felelnie az azonosítókra vonatkozó szabályoknak, de a 32 karakternél hosszabb azonosítók nem engedélyezettek. Csak a beágyazott BEGIN...COMMIT vagy BEGIN...ROLLBACK utasítások legkülső párján használjon tranzakcióneveket. transaction_name mindig megkülönbözteti a kis- és nagybetűk megkülönböztetése, még akkor is, ha az SQL Server-példány nem érzékeny a kis- és nagybetűkre.

@tran_name_variable

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Fabric SQL Database és Felügyelt Azure SQL-példány

Egy felhasználó által definiált változó neve, amely érvényes tranzakciónevet tartalmaz. A változót karakter, varchar, nchar vagy nvarchar adattípussal kell deklarálni. Ha 32 karakternél több karaktert ad át a változónak, csak az első 32 karaktert használja a rendszer. A többi karakter csonkolt.

MARKKAL [ 'leírás' ]

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Fabric SQL Database és Felügyelt Azure SQL-példány

Megadja, hogy a tranzakció szerepel-e a naplóban. a leírás egy sztring, amely a jelet írja le. A 128 karakternél hosszabb leírásokat a rendszer 128 karakterre csonkolja, mielőtt a msdb.dbo.logmarkhistory táblában tárolva lett volna.

Ha WITH MARK ezt használja, meg kell adnia egy tranzakciónevet. WITH MARK lehetővé teszi a tranzakciónaplók névvel ellátott jelre való visszaállítását.

Remarks

BEGIN TRANSACTIONnövekmények @@TRANCOUNT .1

BEGIN TRANSACTION olyan pontot jelöl, ahol a kapcsolat által hivatkozott adatok logikailag és fizikailag konzisztensek. Ha hiba történik, az összes adatmódosítás a BEGIN TRANSACTION visszaállítás után történik, hogy az adatok visszakerüljenek ebbe az ismert konzisztenciaállapotba. Minden tranzakció addig tart, amíg hiba nélkül be nem fejeződik, és COMMIT TRANSACTION a módosításokat az adatbázis állandó részévé teszi, vagy hibák lépnek fel, és az összes módosítás egy ROLLBACK TRANSACTION utasítással törlődik.

BEGIN TRANSACTION elindít egy helyi tranzakciót az utasítást kibocsátó kapcsolathoz. Az aktuális tranzakcióelkülönítési szint beállításaitól függően a kapcsolat által kiadott Transact-SQL utasítások támogatásához beszerzett számos erőforrás zárolva lesz, amíg egy vagy COMMIT TRANSACTION egy ROLLBACK TRANSACTION utasítással nem fejeződik be. A hosszú ideig fennálló tranzakciók megakadályozhatják, hogy más felhasználók hozzáférjenek ezekhez a zárolt erőforrásokhoz, és megakadályozhatják a napló csonkolását is.

Bár BEGIN TRANSACTION elindít egy helyi tranzakciót, az nem lesz rögzítve a tranzakciónaplóban, amíg az alkalmazás nem hajt végre egy, a naplóban rögzítendő műveletet, például egy INSERT, UPDATEvagy DELETE utasítás végrehajtását. Az alkalmazások olyan műveleteket hajthatnak végre, mint például a zárolások beszerzése az utasítások tranzakcióelkülönítési SELECT szintjének védelme érdekében, de semmi sem lesz rögzítve a naplóban, amíg az alkalmazás nem hajt végre módosítási műveletet.

Ha több tranzakciót nevez el egy tranzakciónévvel rendelkező beágyazott tranzakciók sorozatában, az kevés hatással van a tranzakcióra. Csak az első (legkülső) tranzakció neve van regisztrálva a rendszerben. Az érvényes savepoint-név kivételével bármely más névre történő visszaállítás hibát okoz. A visszaállítás előtt végrehajtott utasítások egyike sem lesz visszaállítva a hiba bekövetkezésekor. Az utasítások csak a külső tranzakció visszahozásakor lesznek visszaállítva.

Az utasítás által BEGIN TRANSACTION indított helyi tranzakció elosztott tranzakcióra eszkalálódik, ha a következő műveleteket hajtja végre az utasítás véglegesítése vagy visszaállítása előtt:

  • A INSERTrendszer végrehajt egy, a csatolt kiszolgálón lévő távoli táblára hivatkozó , DELETEvagy UPDATE utasítást. Az INSERT, UPDATEvagy DELETE utasítás meghiúsul, ha a csatolt kiszolgáló eléréséhez használt OLE DB-szolgáltató nem támogatja a ITransactionJoin felületet.

  • A távoli tárolt eljárás hívása akkor történik, ha a REMOTE_PROC_TRANSACTIONS beállítás értéke ON.

Az SQL Server helyi példánya lesz a tranzakcióvezérlő, és a Microsoft Distributed Transaction Coordinator (MS DTC) használatával kezeli az elosztott tranzakciót.

A tranzakciók explicit módon végrehajthatók elosztott tranzakcióként a használatával BEGIN DISTRIBUTED TRANSACTION. További információ: BEGIN DISTRIBUTED TRANSACTION.

Ha SET IMPLICIT_TRANSACTIONS be van állítva ON, az BEGIN TRANSACTION utasítás két beágyazott tranzakciót hoz létre. További információ: SET IMPLICIT_TRANSACTIONS.

Megjelölt tranzakciók

A WITH MARK beállítás hatására a tranzakció neve bekerül a tranzakciónaplóba. Amikor visszaállít egy adatbázist egy korábbi állapotba, a megjelölt tranzakció dátum és idő helyett használható. További információ: A megjelölt tranzakciók használata a kapcsolódó adatbázisok konzisztens helyreállításához és a VISSZAÁLLÍTÁSI utasításokhoz.

Emellett tranzakciónapló-jelekre is szükség van, ha egy kapcsolódó adatbáziskészletet logikailag konzisztens állapotba kell állítania. A jelek elosztott tranzakcióval elhelyezhetők a kapcsolódó adatbázisok tranzakciónaplóiban. A kapcsolódó adatbázisok ezen jelekre való helyreállítása tranzakciós konzisztens adatbáziskészletet eredményez. A védjegyek kapcsolódó adatbázisokban való elhelyezése speciális eljárásokat igényel.

A jelölés csak akkor kerül a tranzakciónaplóba, ha az adatbázist a megjelölt tranzakció frissíti. Az adatokat nem módosító tranzakciók nincsenek megjelölve.

BEGIN TRANSACTION <new_name> WITH MARK egy már meglévő tranzakcióba ágyazható, amely nincs megjelölve. Ha így tesz, <new_name> a tranzakció jelneve lesz annak ellenére, hogy a tranzakció már meg lett adva. Az alábbi példában M2 a megjelölés neve látható.

BEGIN TRAN T1;

UPDATE table1 ...;

BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT * from table1;

COMMIT TRAN M2;

UPDATE table3 ...;

COMMIT TRAN T1;

A tranzakciók beágyazásakor a következő figyelmeztető üzenet fog megjelenni, ha egy már megjelölt tranzakciót próbál megjelölni:

Server: Msg 3920, Level 16, State 1, Line 3
WITH MARK option only applies to the first BEGIN TRAN WITH MARK.
The option is ignored.

Permissions

A nyilvános szerepkör tagságát igényli.

Examples

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. Explicit tranzakció használata

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Fabric SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW)

BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT;

B. Tranzakció visszagördülése

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Fabric SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW)

Az alábbi példa egy tranzakció visszagördülésének hatását mutatja be. Ebben a példában az ROLLBACK utasítás visszaállítja az INSERT utasítást, de a létrehozott tábla továbbra is létezik.

CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
    INSERT INTO ValueTable VALUES(1);
    INSERT INTO ValueTable VALUES(2);
ROLLBACK;

C. Tranzakció elnevezése

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Fabric SQL Database, Felügyelt Azure SQL-példány

Az alábbi példa bemutatja, hogyan nevezhet el egy tranzakciót.

DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';

BEGIN TRANSACTION @TranName;
USE AdventureWorks2022;
DELETE FROM AdventureWorks2022.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;

COMMIT TRANSACTION @TranName;
GO

D. Tranzakció megjelölése

A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Fabric SQL Database, Felügyelt Azure SQL-példány

Az alábbi példa bemutatja, hogyan jelölhet meg egy tranzakciót. A tranzakció CandidateDelete meg van jelölve.

BEGIN TRANSACTION CandidateDelete
    WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks2022;
GO
DELETE FROM AdventureWorks2022.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GO