Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
Specificerar starten av en Transact-SQL distribuerad transaktion. När SQL Server används hanteras den distribuerade transaktionen av Microsoft Distributed Transaction Coordinator (MS DTC).
- I fallet med Azure SQL Managed Instance hanteras den distribuerade transaktionen av tjänsten själv och inte av MS DTC. För information om distribuerade transaktioner i Azure SQL Database och Azure SQL Managed Instance, se Distribuerade transaktioner över molndatabaser.
Transact-SQL syntaxkonventioner
Syntax
BEGIN DISTRIBUTED { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ]
[ ; ]
Arguments
transaction_name
Är ett användardefinierat transaktionsnamn som används för att spåra den distribuerade transaktionen inom MS DTC-verktyg. transaction_name måste följa reglerna för identifierare och måste vara <= 32 tecken.
@ tran_name_variable
Är namnet på en användardefinierad variabel som innehåller ett transaktionsnamn som används för att spåra den distribuerade transaktionen inom MS DTC-verktyg. Variabeln måste deklareras med datatypen char, varchar, nchar eller nvarchar .
Anmärkningar
Den instans av SQL Server Database Engine som kör BEGIN DISTRIBUTED TRANSACTION-satsen är transaktionsursprungspersonen och styr slutförandet av transaktionen. När en efterföljande COMMIT TRANSACTION- eller ROLLBACK TRANSACTION-sats utfärdas för sessionen, begär den kontrollerande instansen att MS DTC ska hantera slutförandet av den distribuerade transaktionen över alla involverade instanser.
Transaktionsnivå-snapshotisolering stöder inte distribuerade transaktioner.
Det primära sättet för fjärrinstanser av databasmotorn att registreras i en distribuerad transaktion är när en session som redan är ansluten till den distribuerade transaktionen utför en distribuerad fråga som refererar till en länkad server.
Till exempel, om BEGIN DISTRIBUTED TRANSACTION utfärdas på ServerA, anropar sessionen en lagrad procedur på ServerB och en annan lagrad procedur på ServerC. Den lagrade proceduren på ServerC utför en distribuerad fråga mot ServerD, och sedan är alla fyra datorer involverade i den distribuerade transaktionen. Instansen av Database Engine på ServerA är den ursprungliga kontrollerande instansen för transaktionen.
De sessioner som är involverade i Transact-SQL distribuerade transaktioner får inte ett transaktionsobjekt som de kan skicka till en annan session för att den uttryckligen ska kunna registreras i den distribuerade transaktionen. Det enda sättet för en fjärrserver att delta i transaktionen är att vara mål för en distribuerad fråga eller ett fjärranrop för lagrad procedur.
När en distribuerad fråga körs i en lokal transaktion uppgraderas transaktionen automatiskt till en distribuerad transaktion om den målinriktade OLE DB-datakällan stöder ITransactionLocal. Om måldatakällan i OLE DB inte stödjer ITransactionLocal, tillåts endast skrivskyddade operationer i den distribuerade frågan.
En session som redan är inskriven i den distribuerade transaktionen utför ett fjärrlagrat proceduranrop som refererar till en fjärrserver.
Alternativet sp_configure remote proc trans styr om anrop till fjärrlagrade procedurer i en lokal transaktion automatiskt får den lokala transaktionen att uppgraderas till en distribuerad transaktion som hanteras av MS DTC. Anslutningsnivåalternativet SET REMOTE_PROC_TRANSACTIONS kan användas för att åsidosätta instansstandarden som fastställts av sp_configure remote proc trans. Med detta alternativ aktiverat orsakar ett fjärrlagrat proceduranrop att en lokal transaktion uppgraderas till en distribuerad transaktion. Den anslutning som skapar MS DTC-transaktionen blir ursprungsorsaken för transaktionen. COMMIT TRANSACTION initierar en MS DTC-koordinerad commit. Om sp_configure remote proc trans alternativet är PÅ skyddas fjärranrop av lagrade procedurer i lokala transaktioner automatiskt som en del av distribuerade transaktioner utan att man behöver skriva om applikationer för att specifikt utfärda BEGIN DISTRIBUERAD TRANSAKTION istället för START TRANSACTION.
För mer information om den distribuerade transaktionsmiljön och processen, se dokumentationen för Microsoft Distributed Transaction Coordinator.
Permissions
Kräver medlemskap i den offentliga rollen.
Examples
Detta exempel tar bort en kandidat från AdventureWorks2025-databasen både på den lokala instansen av databasmotorn och på en instans på en fjärrserver. Både den lokala och fjärrdatabasen kommer antingen att committa eller rulla tillbaka transaktionen.
Anmärkning
Om inte MS DTC för närvarande är installerat på datorn som kör instansen av databasmotorn, ger detta exempel ett felmeddelande. För mer information om installation av MS DTC, se dokumentationen för Microsoft Distributed Transaction Coordinator.
USE AdventureWorks2022;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks2022.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks2022.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO