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.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Raktár a Microsoft Fabric-ben
SQL adatbázis a Microsoft Fabric-ben
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 felügyelt Azure SQL-példányhoz és a Microsoft Fabric SQL-adatbázishoz.
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[ ; ]
Szintaxis Fabric Data Warehouse és Azure Synapse Analytics esetén.
BEGIN { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben.
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 legkülső páron BEGIN...COMMIT vagy BEGIN...ROLLBACK utasításokon 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 adatbázismotor-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, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben.
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, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben.
Megadja, hogy a tranzakció szerepel-e a tranzakció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ó visszaállítását a jel által azonosított pontra.
Remarks
BEGIN TRANSACTIONnövekmények @@TRANCOUNT .1
BEGIN TRANSACTION olyan pontot jelöl, ahol a munkamenet által hivatkozott adatok bizonyos konzisztenciával rendelkeznek. A visszaállítás után BEGIN TRANSACTION végrehajtott összes adatmódosítás az adatok ezen ismert konzisztenciájának visszaállításához. Minden tranzakció addig tart, amíg COMMIT TRANSACTION a módosításokat az adatbázis állandó részévé nem teszik, vagy az összes módosítást egy ROLLBACK TRANSACTION utasítással törli a rendszer.
A tranzakciók automatikusan visszaállíthatók, ha tranzakció-megszakítási hiba történik, vagy ha futásidejű hiba történik, és a XACT_ABORT munkamenet-beállítás értéke ONa következő. További információért lásd SET XACT_ABORT.
BEGIN TRANSACTION elindít egy helyi tranzakciót az utasítást kibocsátó munkamenethez. Az aktuális tranzakcióelkülönítési szint beállításaitól függően a munkamenet által kiadott Transact-SQL utasítások támogatásához beszerzett erőforrásokat a tranzakció zárolja, amíg egy vagy COMMIT TRANSACTION utasítással ROLLBACK TRANSACTION nem fejeződik be. A hosszú ideig fennálló tranzakciók megakadályozhatják, hogy más munkamenetek hozzáférjenek ezekhez a zárolt erőforrásokhoz, és megakadályozhatják a tranzakciónapló csonkolását és a verziótár törlé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. A tranzakció elindítása után az adatbázismotor olyan műveleteket hajthat végre, mint a zárolások beszerzése az utasítások tranzakcióelkülönítési SELECT szintjének védelme érdekében, de a tranzakciónaplóban semmi sem lesz rögzítve, amíg az alkalmazás nem hajt végre módosítási műveletet.
A kibocsátás BEGIN TRANSACTIONután ismét kiadhat BEGIN TRANSACTION egy vagy több belső tranzakció elindításához. Annak ellenére, hogy megadhat transaction_name egy belső tranzakcióhoz, a rendszer csak az első (legkülső) tranzakciónevet regisztrálja a rendszerben. Bármely más névre való visszaállítás (az érvényes savepoint-név kivételével) hibát okoz anélkül, hogy az utasítások bármelyikét visszaállítanák. 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ó akkor lesz előléptetve elosztott tranzakcióra, 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ó ,DELETEvagyUPDATEutasítást. AzINSERT,UPDATEvagyDELETEutasítás meghiúsul, ha a csatolt kiszolgáló eléréséhez használt OLE DB-szolgáltató nem támogatja aITransactionJoinfelületet.A távoli tárolt eljárás hívása akkor történik, ha a
REMOTE_PROC_TRANSACTIONSbeállítás értékeON.
A helyi adatbázismotor-példány 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 egy külső és egy belső tranzakciót hoz létre, 2 értékre állítva @@TRANCOUNT . További információért lásd SET IMPLICIT_TRANSACTIONS.
Megjegyzés:
Az adatbázismotor nem támogatja az egymástól függetlenül kezelhető beágyazott tranzakciókat. Belső tranzakciós decrements @@TRANCOUNT véglegesítés, de nincs más hatása. A belső tranzakciók visszaállítása mindig visszaállítja a külső tranzakciót, kivéve, ha létezik mentési pont , és az ROLLBACK utasításban meg van adva.
Megjelölt tranzakciók
A WITH MARK beállítás hatására a tranzakció neve rögzítve lesz a tranzakciónaplóban. Ha egy adatbázist egy korábbi állapotba állít vissza, a megjelölt tranzakcióval dátum és idő helyett megadható a visszaállítási pont. További információért lásd: Jelölt tranzakciók használata kapcsolódó adatbázisok következetesen helyreállításához és RESTORE kimutatások.
Emellett tranzakciónapló-jelekre is szükség van, ha egy kapcsolódó adatbáziskészletet egy bizonyos megosztott konzisztenciaállapotba kell helyreállítania. Egy olyan alkalmazás, amely tisztában van minden adatbázis konzisztenciájának állapotával, jeleket helyezhet el a kapcsolódó adatbázisok tranzakciónaplóiban egy adatbázisközi vagy elosztott tranzakció használatával. A kapcsolódó adatbázisok ezen jelekre való helyreállítása olyan adatbázisok készletét eredményezi, amelyek ismert megosztott konzisztenciaállapottal rendelkeznek.
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ókat a rendszer nem rögzíti a naplóban.
BEGIN TRANSACTION <new_name> WITH MARK belső tranzakció indításakor használható. Ebben az esetben <new_name> akkor lesz a tranzakció neve, ha a külső tranzakció nincs megjelölve. Az alábbi fogalmi példában M2 a védjegy neve látható.
BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT column1 FROM table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;
Ha egy belső tranzakciót jelöl meg, a következő figyelmeztető üzenetet kapja, 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
Tagságot igényel a public szerepkörben.
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
Alkalmazható: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Azure SQL Managed Instance, SQL database in Microsoft Fabric, és Azure Synapse Analytics
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Tranzakció visszaállítása
Alkalmazható: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Azure SQL Managed Instance, SQL database in Microsoft Fabric, és Azure Synapse Analytics
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, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben
Az alábbi példa bemutatja, hogyan nevezhet el egy tranzakciót.
DECLARE @TranName AS VARCHAR (20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
D. Tranzakció megjelölése
A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben
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';
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION CandidateDelete;