Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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
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' ] ]
]
[ ; ]
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, 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ó: 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 ROLLBACK TRANSACTION utasítással COMMIT 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ó: 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ó: 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 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
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, Azure Synapse Analytics, Analytics Platform System (PDW)
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Tranzakció visszaállítása
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, 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, 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;