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
Označí výchozí bod explicitní místní transakce. Explicitní transakce začínají příkazem BEGIN TRANSACTION a končí příkazem COMMIT nebo ROLLBACK příkazem.
Syntax
Syntaxe pro SQL Server, Azure SQL Database, Spravovanou instanci Azure SQL a databázi SQL v Microsoft Fabric.
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[ ; ]
Syntaxe pro datový sklad Fabric, Azure Synapse Analytics a systém platformy Analytics (PDW).
BEGIN { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, DATABÁZE SQL v Microsoft Fabric.
Název přiřazený transakci.
transaction_name musí odpovídat pravidlům identifikátorů, ale identifikátory delší než 32 znaků nejsou povolené. Názvy transakcí používejte pouze u nejkrajnější dvojice BEGIN...COMMIT příkazů nebo BEGIN...ROLLBACK příkazů.
transaction_name se vždy rozlišují malá a velká písmena, i když instance databázového stroje nerozlišuje malá a velká písmena.
@tran_name_variable
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, DATABÁZE SQL v Microsoft Fabric.
Název uživatelem definované proměnné obsahující platný název transakce. Proměnná musí být deklarována pomocí datového typu char, varchar, nchar nebo nvarchar . Pokud proměnné předáte více než 32 znaků, použijí se pouze prvních 32 znaků. Zbývající znaky jsou zkráceny.
S MARKEM [ 'popis' ]
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, DATABÁZE SQL v Microsoft Fabric.
Určuje, že transakce je označena v transakčním protokolu.
description je řetězec, který popisuje značku.
Popis delší než 128 znaků je před uložením msdb.dbo.logmarkhistory v tabulce zkrácen na 128 znaků.
Pokud WITH MARK se použije, musí být zadán název transakce.
WITH MARK umožňuje obnovení transakčního protokolu na bod identifikovaný značkou.
Remarks
BEGIN TRANSACTION přírůstky @@TRANCOUNT o 1.
BEGIN TRANSACTION představuje bod, kdy data odkazovaná relací mají určitý stav konzistence. Všechny změny dat provedené po BEGIN TRANSACTION vrácení zpět, aby se data vrátila do tohoto známého stavu konzistence. Každá transakce trvá, dokud COMMIT TRANSACTION se nevystaví k provedení změn trvalé části databáze, nebo všechny úpravy se vymažou příkazem ROLLBACK TRANSACTION .
Transakce se může automaticky vrátit zpět, pokud dojde k chybě přerušení transakce nebo pokud dojde k nějaké chybě za běhu a XACT_ABORT možnost relace je nastavena na ON. Další informace najdete v tématu SET XACT_ABORT.
BEGIN TRANSACTION spustí místní transakci pro relaci vydávající příkaz. V závislosti na aktuálním nastavení úrovně izolace transakcí jsou prostředky získané pro podporu Transact-SQL příkazů vydaných relací uzamčeny transakcí, dokud se nedokončí buď s příkazem COMMIT TRANSACTION nebo příkazem ROLLBACK TRANSACTION . Transakce, které zůstaly nevyřízeny po dlouhou dobu, mohou zabránit jiným relacím v přístupu k těmto uzamčeným prostředkům a také zabránit zkrácení transakčního protokolu a vyčištění úložiště verzí.
I když BEGIN TRANSACTION spouští místní transakci, není zaznamenána v transakčním protokolu, dokud aplikace pak neprovede akci, která musí být zaznamenána v protokolu, například spuštění INSERT, UPDATEnebo DELETE příkaz. Po spuštění transakce může databázový stroj provádět akce, jako je získání zámků za účelem ochrany úrovně SELECT izolace transakcí příkazů, ale nic se nezaznamenává v transakčním protokolu, dokud aplikace neprovede akci úpravy.
Po vydání BEGIN TRANSACTIONmůžete znovu spustit BEGIN TRANSACTION jednu nebo více vnitřních transakcí. I když můžete zadat transaction_name pro vnitřní transakci, pouze první (vnější) název transakce je registrován v systému. Vrácení zpět k jakémukoli jinému názvu (kromě platného názvu savepointu) vygeneruje chybu bez vrácení jakéhokoli příkazu zpět. Příkazy se vrátí zpět pouze v případech, kdy je vnější transakce vrácena zpět.
Místní transakce spuštěná příkazem je povýšena na distribuovanou BEGIN TRANSACTION transakci, pokud jsou provedeny následující akce před potvrzením příkazu nebo vrácení zpět:
Spustí se
INSERTpříkaz ,DELETEneboUPDATEpříkaz, který odkazuje na vzdálenou tabulku na propojeném serveru. PříkazINSERT,UPDATEneboDELETEpříkaz selže, pokud zprostředkovatel OLE DB použitý pro přístup k propojenému serveru nepodporujeITransactionJoinrozhraní.Volání vzdálené uložené procedury, pokud je možnost nastavena
REMOTE_PROC_TRANSACTIONSnaON.
Místní instance databázového stroje se stane kontrolerem transakcí a používá microsoft Distributed Transaction Coordinator (MS DTC) ke správě distribuované transakce.
Transakce lze explicitně provést jako distribuovanou transakci pomocí BEGIN DISTRIBUTED TRANSACTION. Další informace naleznete v tématu BEGIN DISTRIBUTED TRANSACTION.
Pokud SET IMPLICIT_TRANSACTIONS je nastavena BEGIN TRANSACTION na ON, příkaz vytvoří vnější a vnitřní transakce, nastavení @@TRANCOUNT na 2. Další informace naleznete v tématu SET IMPLICIT_TRANSACTIONS.
Poznámka:
Databázový stroj nepodporuje nezávisle spravovatelné vnořené transakce. Potvrzení vnitřní transakce dekrementuje @@TRANCOUNT , ale nemá žádné jiné účinky. Vrácení zpět vnitřní transakce vždy vrátí zpět vnější transakce, pokud neexistuje savepoint a je zadán v ROLLBACK příkazu.
Označené transakce
Tato WITH MARK možnost způsobí, že se název transakce zaznamená do transakčního protokolu. Při obnovení databáze do dřívějšího stavu lze označenou transakci použít k určení bodu obnovení místo data a času. Další informace naleznete v tématu Použití označených transakcí k obnovení souvisejících databází konzistentně a RESTORE příkazy.
Kromě toho jsou značky transakčních protokolů nezbytné, pokud potřebujete obnovit sadu souvisejících databází do určitého sdíleného stavu konzistence. Aplikace, která je si vědoma stavu konzistence každé databáze, může umístit značky do transakčních protokolů souvisejících databází pomocí křížové databáze nebo distribuované transakce. Obnovením sady souvisejících databází na tyto značky vznikne sada databází se známým sdíleným stavem konzistence.
Značka je umístěna v transakčním protokolu pouze v případě, že databáze je aktualizována označenou transakcí. Transakce, které neupravují data, se v protokolu nezaznamenávají.
BEGIN TRANSACTION <new_name> WITH MARK lze použít při spuštění vnitřní transakce. V takovém případě se stane názvem značky transakce, <new_name> pokud vnější transakce není označena. V následujícím koncepčním příkladu M2 je název značky.
BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT column1 FROM table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;
Když označíte vnitřní transakci, zobrazí se následující zpráva upozornění, pokud se pokusíte označit transakci, která je již označena:
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
Vyžaduje členství v public roli.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použití explicitní transakce
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, SQL Database v Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Vrácení transakce zpět
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, SQL Database v Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
Následující příklad ukazuje účinek vrácení transakce zpět. V tomto příkladu příkaz ROLLBACK vrátí příkaz zpět INSERT , ale vytvořená tabulka stále existuje.
CREATE TABLE ValueTable
(
id INT
);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES (1);
INSERT INTO ValueTable VALUES (2);
ROLLBACK;
C. Pojmenování transakce
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, DATABÁZE SQL v Microsoft Fabric
Následující příklad ukazuje, jak pojmenovat transakci.
DECLARE @TranName AS VARCHAR (20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
D. Označení transakce
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, DATABÁZE SQL v Microsoft Fabric
Následující příklad ukazuje, jak označit transakci. Transakce CandidateDelete je označena.
BEGIN TRANSACTION CandidateDelete
WITH MARK N'Deleting a Job Candidate';
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION CandidateDelete;
Související obsah
- BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
- transakce potvrzení (Transact-SQL)
- ZAVÁZEJ PRÁCI (Transact-SQL)
- transakce vrácení zpět (Transact-SQL)
- PRÁCE NA NÁVRATU ZPĚT (Transact-SQL)
- ULOŽIT TRANSAKCI (Transact-SQL)
- Průvodce uzamčením transakcí a verzováním řádků