Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Oznacza punkt początkowy jawnej transakcji lokalnej. Jawne transakcje zaczynają się od instrukcji BEGIN TRANSACTION i kończą się instrukcją COMMIT or ROLLBACK .
Transact-SQL konwencje składni
Syntax
Składnia dla programu SQL Server, usługi Azure SQL Database, usługi Azure SQL Managed Instance, bazy danych SQL w usłudze Microsoft Fabric.
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[ ; ]
Składnia dla usługi Fabric Data Warehouse, Azure Synapse Analytics i Analytics Platform System (PDW).
BEGIN { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database w usłudze Microsoft Fabric.
Nazwa przypisana do transakcji.
transaction_name muszą być zgodne z regułami dotyczącymi identyfikatorów, ale identyfikatory dłuższe niż 32 znaki nie są dozwolone. Użyj nazw transakcji tylko w najbardziej zewnętrznej parze instrukcji BEGIN...COMMIT lub BEGIN...ROLLBACK .
transaction_name zawsze uwzględnia wielkość liter, nawet jeśli wystąpienie aparatu bazy danych nie uwzględnia wielkości liter.
@tran_name_variable
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database w usłudze Microsoft Fabric.
Nazwa zmiennej zdefiniowanej przez użytkownika zawierająca prawidłową nazwę transakcji. Zmienna musi być zadeklarowana przy użyciu typu danych char, varchar, nchar lub nvarchar . Jeśli do zmiennej jest przekazywanych więcej niż 32 znaki, używane są tylko pierwsze 32 znaki. Pozostałe znaki są obcinane.
Z MARKIEM [ 'opis' ]
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database w usłudze Microsoft Fabric.
Określa, że transakcja jest oznaczona w dzienniku transakcji.
description to ciąg opisujący znacznik.
Opis dłuższy niż 128 znaków jest obcinany do 128 znaków przed zapisaniem msdb.dbo.logmarkhistory w tabeli.
W przypadku WITH MARK użycia należy określić nazwę transakcji.
WITH MARK umożliwia przywrócenie dziennika transakcji do punktu zidentyfikowanego przez znacznik.
Remarks
BEGIN TRANSACTION przyrosty @@TRANCOUNT według 1.
BEGIN TRANSACTION reprezentuje punkt, w którym dane, do których odwołuje się sesja, mają określony stan spójności. Wszystkie modyfikacje danych wprowadzone po BEGIN TRANSACTION tym, jak można wycofać dane, aby zwrócić dane do tego znanego stanu spójności. Każda transakcja trwa do momentu COMMIT TRANSACTION wydania w celu wprowadzenia modyfikacji stałej części bazy danych lub wszystkie modyfikacje zostaną usunięte z instrukcji ROLLBACK TRANSACTION .
Transakcja może zostać automatycznie wycofana, jeśli wystąpi błąd przerwania transakcji lub wystąpi jakikolwiek błąd czasu wykonywania, a XACT_ABORT opcja sesji jest ustawiona na ONwartość . Aby uzyskać więcej informacji, zobacz SET XACT_ABORT.
BEGIN TRANSACTION uruchamia transakcję lokalną dla sesji wystawiającej instrukcję . W zależności od bieżących ustawień poziomu izolacji transakcji zasoby uzyskane do obsługi instrukcji Transact-SQL wystawionych przez sesję są blokowane przez transakcję, dopóki nie zakończy się z instrukcją COMMIT TRANSACTION lub ROLLBACK TRANSACTION . Transakcje pozostawione zaległe przez długi czas mogą uniemożliwić innym sesjom dostęp do tych zablokowanych zasobów, a także zapobiec obcinaniu dziennika transakcji i czyszczeniu magazynu wersji.
Mimo że BEGIN TRANSACTION rozpoczyna transakcję lokalną, nie jest rejestrowana w dzienniku transakcji, dopóki aplikacja nie wykona akcji, która musi zostać zarejestrowana w dzienniku, na przykład wykonanie INSERTinstrukcji , UPDATElub DELETE . Po rozpoczęciu transakcji aparat bazy danych może wykonywać akcje, takie jak uzyskiwanie blokad w celu ochrony poziomu izolacji transakcji instrukcji SELECT , ale nic nie jest rejestrowane w dzienniku transakcji, dopóki aplikacja nie wykona akcji modyfikacji.
Po wydaniu BEGIN TRANSACTIONpolecenia można ponownie wydać BEGIN TRANSACTION polecenie , aby uruchomić co najmniej jedną transakcję wewnętrzną. Mimo że można określić transaction_name dla transakcji wewnętrznej, tylko pierwsza (najbardziej zewnętrzna) nazwa transakcji jest zarejestrowana w systemie. Wycofanie do dowolnej innej nazwy (innej niż prawidłowa nazwa punktu zapisu) powoduje wygenerowanie błędu bez wycofywania żadnej z instrukcji. Instrukcje są wycofywane tylko wtedy, gdy zewnętrzna transakcja zostanie wycofana.
Transakcja lokalna uruchomiona przez BEGIN TRANSACTION instrukcję jest promowana do transakcji rozproszonej, jeśli następujące akcje są wykonywane przed zatwierdzeniu lub wycofaniu instrukcji:
Wykonywana
INSERTjest instrukcja ,DELETElubUPDATE, która odwołuje się do tabeli zdalnej na serwerze połączonym. InstrukcjaINSERT,UPDATElubDELETEkończy się niepowodzeniem, jeśli dostawca OLE DB używany do uzyskiwania dostępu do serwera połączonego nie obsługuje interfejsuITransactionJoin.Wywołanie jest wykonywane do zdalnej procedury składowanej, gdy opcja jest ustawiona
REMOTE_PROC_TRANSACTIONSnaON.
Lokalne wystąpienie aparatu bazy danych staje się kontrolerem transakcji i używa narzędzia Microsoft Distributed Transaction Coordinator (MS DTC) do zarządzania transakcją rozproszoną.
Transakcję można jawnie wykonać jako transakcję rozproszoną przy użyciu polecenia BEGIN DISTRIBUTED TRANSACTION. Aby uzyskać więcej informacji, zobacz BEGIN DISTRIBUTED TRANSACTION (ROZPOCZNIJ TRANSAKCJĘ ROZPROSZONĄ).
Gdy SET IMPLICIT_TRANSACTIONS jest ustawiona ONwartość , instrukcja tworzy BEGIN TRANSACTION zewnętrzną i wewnętrzną transakcję, ustawiając wartość @@TRANCOUNT 2. Aby uzyskać więcej informacji, zobacz SET IMPLICIT_TRANSACTIONS.
Uwaga / Notatka
Aparat bazy danych nie obsługuje niezależnie zarządzanych zagnieżdżonych transakcji. Zatwierdzenie wewnętrznego dekrementowania @@TRANCOUNT transakcji, ale nie ma innych efektów. Wycofanie transakcji wewnętrznej zawsze cofa zewnętrzną transakcję, chyba że istnieje punkt zapisywania i jest określony w instrukcji ROLLBACK .
Oznaczone transakcje
Opcja WITH MARK powoduje zarejestrowanie nazwy transakcji w dzienniku transakcji. Podczas przywracania bazy danych do wcześniejszego stanu oznaczona transakcja może służyć do określenia punktu przywracania zamiast daty i godziny. Aby uzyskać więcej informacji, zobacz Używanie oznaczonych transakcji do odzyskiwania powiązanych baz danych spójnie i instrukcji RESTORE.
Ponadto znaczniki dziennika transakcji są niezbędne, jeśli musisz odzyskać zestaw powiązanych baz danych z określonym udostępnionym stanem spójności. Aplikacja, która ma świadomość stanu spójności każdej bazy danych, może umieszczać znaczniki w dziennikach transakcji powiązanych baz danych przy użyciu między bazami danych lub transakcji rozproszonej. Odzyskanie zestawu powiązanych baz danych z tymi znacznikami powoduje utworzenie zestawu baz danych, które mają znany wspólny stan spójności.
Znacznik jest umieszczany w dzienniku transakcji tylko wtedy, gdy baza danych jest aktualizowana przez oznaczoną transakcję. Transakcje, które nie modyfikują danych, nie są rejestrowane w dzienniku.
BEGIN TRANSACTION <new_name> WITH MARK można użyć podczas uruchamiania transakcji wewnętrznej. W takim przypadku staje się nazwą znacznika dla transakcji, <new_name> jeśli transakcja zewnętrzna nie jest oznaczona. W poniższym przykładzie M2 koncepcyjnym jest nazwą znacznika.
BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT column1 FROM table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;
Po oznaczeniu transakcji wewnętrznej zostanie wyświetlony następujący komunikat ostrzegawczy, jeśli spróbujesz oznaczyć transakcję, która jest już oznaczona:
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
Wymaga członkostwa w public roli.
Examples
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
A. Używanie transakcji jawnej
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Wycofywanie transakcji
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
W poniższym przykładzie pokazano efekt wycofywania transakcji. W tym przykładzie ROLLBACK instrukcja wycofa instrukcję INSERT , ale utworzona tabela nadal istnieje.
CREATE TABLE ValueTable
(
id INT
);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES (1);
INSERT INTO ValueTable VALUES (2);
ROLLBACK;
C. Nazwij transakcję
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, BAZA danych SQL w usłudze Microsoft Fabric
W poniższym przykładzie pokazano, jak nazwać transakcję.
DECLARE @TranName AS VARCHAR (20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
D. Oznaczanie transakcji
Dotyczy: SQL Server 2008 (10.0.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, BAZA danych SQL w usłudze Microsoft Fabric
W poniższym przykładzie pokazano, jak oznaczyć transakcję. Transakcja CandidateDelete jest oznaczona.
BEGIN TRANSACTION CandidateDelete
WITH MARK N'Deleting a Job Candidate';
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION CandidateDelete;