BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions)

Gibt den Anfang einer verteilten Transact-SQLTransact-SQL-Transaktion an, die von MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) verwaltet wird.Specifies the start of a Transact-SQLTransact-SQL distributed transaction managed by MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC).

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

BEGIN DISTRIBUTED { TRAN | TRANSACTION }   
     [ transaction_name | @tran_name_variable ]   
[ ; ]  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumenteArguments

transaction_nametransaction_name
Der benutzerdefinierte Transaktionsname, unter dem die verteilte Transaktion in den MS DTC-Hilfsprogrammen nachverfolgt wird.Is a user-defined transaction name used to track the distributed transaction within MS DTC utilities. transaction_name muss den Regeln für Bezeichner entsprechen, d.h. <= 32 Zeichen enthalten.transaction_name must conform to the rules for identifiers and must be <= 32 characters.

@tran_name_variable@tran_name_variable
Der Name einer benutzerdefinierten Variablen, die einen Transaktionsnamen enthält. Mithilfe dieses Namens wird die verteilte Transaktion in den MS DTC-Hilfsprogrammen nachverfolgt.Is the name of a user-defined variable containing a transaction name used to track the distributed transaction within MS DTC utilities. Die Variable muss mit einem der folgenden Datentypen deklariert werden: char, varchar, nchar oder nvarchar.The variable must be declared with a char, varchar, nchar, or nvarchar data type.

BemerkungenRemarks

Die Instanz von SQL Server-Datenbank-EngineSQL Server Database Engine, die die BEGIN DISTRIBUTED TRANSACTION-Anweisung ausführt, wird als Transaktionsurheber bezeichnet und steuert den Abschluss der Transaktion.The instance of the SQL Server-Datenbank-EngineSQL Server Database Engine executing the BEGIN DISTRIBUTED TRANSACTION statement is the transaction originator and controls the completion of the transaction. Wenn im Anschluss eine COMMIT TRANSACTION- oder ROLLBACK TRANSACTION-Anweisung für die Sitzung ausgegeben wird, fordert die steuernde Instanz MS DTC auf, die Beendigung der verteilten Transaktion auf allen beteiligten Instanzen zu verwalten.When a subsequent COMMIT TRANSACTION or ROLLBACK TRANSACTION statement is issued for the session, the controlling instance requests that MS DTC manage the completion of the distributed transaction across all of the instances involved.

Die Momentaufnahmeisolation auf Transaktionsebene unterstützt keine verteilten Transaktionen.Transaction-level snapshot isolation does not support distributed transactions.

Remoteinstanzen von Datenbank-EngineDatabase Engine werden in erster Linie in eine verteilte Transaktion eingetragen, wenn eine bereits in der verteilten Transaktion eingetragene Sitzung eine verteilte Abfrage ausführt, die auf einen Verbindungsserver verweist.The primary way remote instances of the Datenbank-EngineDatabase Engine are enlisted in a distributed transaction is when a session already enlisted in the distributed transaction executes a distributed query referencing a linked server.

Wenn BEGIN DISTRIBUTED TRANSACTION beispielsweise auf Server A ausgegeben wird, ruft die Sitzung eine gespeicherte Prozedur auf Server B und eine weitere gespeicherte Prozedur auf Server C auf.For example, if BEGIN DISTRIBUTED TRANSACTION is issued on ServerA, the session calls a stored procedure on ServerB and another stored procedure on ServerC. Die gespeicherte Prozedur auf Server C führt eine verteilte Abfrage für Server D aus. In diesem Fall sind alle vier Computer an der verteilten Transaktion beteiligt.The stored procedure on ServerC executes a distributed query against ServerD, and then all four computers are involved in the distributed transaction. Die Instanz von Datenbank-EngineDatabase Engine auf Server A ist die ursprüngliche steuernde Instanz für die Transaktion.The instance of the Datenbank-EngineDatabase Engine on ServerA is the originating controlling instance for the transaction.

Die Sitzungen, die an den verteilten Transact-SQLTransact-SQL-Transaktionen beteiligt sind, erhalten kein Transaktionsobjekt, das sie an eine andere Sitzung weitergeben können, um explizit in die verteilte Transaktion eingetragen zu werden.The sessions involved in Transact-SQLTransact-SQL distributed transactions do not get a transaction object they can pass to another session for it to explicitly enlist in the distributed transaction. Ein Remoteserver kann nur in die Transaktion eingetragen werden, wenn er das Ziel einer verteilten Abfrage oder eines Aufrufs einer remote gespeicherten Prozedur ist.The only way for a remote server to enlist in the transaction is to be the target of a distributed query or a remote stored procedure call.

Bei Ausführung einer verteilten Abfrage in einer lokalen Transaktion wird diese automatisch zu einer verteilten Transaktion höher gestuft, wenn die OLE DB-Zieldatenquelle ITransactionLocal unterstützt.When a distributed query is executed in a local transaction, the transaction is automatically promoted to a distributed transaction if the target OLE DB data source supports ITransactionLocal. Unterstützt die OLE DB-Zieldatenquelle ITransactionLocal nicht, sind in der verteilten Abfrage nur Lesezugriffe zulässig.If the target OLE DB data source does not support ITransactionLocal, only read-only operations are allowed in the distributed query.

Eine in die verteilte Transaktion bereits eingetragene Sitzung führt einen Aufruf einer remote gespeicherten Prozedur aus, die auf einen Remoteserver verweist.A session already enlisted in the distributed transaction performs a remote stored procedure call referencing a remote server.

Die Option sp_configure remote proc trans steuert, ob Aufrufe von remote gespeicherten Prozeduren in einer lokalen Transaktion automatisch bewirken, dass die lokale Transaktion zu einer verteilten Transaktion höher gestuft wird, die von MS DTC verwaltet wird.The sp_configure remote proc trans option controls whether calls to remote stored procedures in a local transaction automatically cause the local transaction to be promoted to a distributed transaction managed by MS DTC. Mit der SET-Option REMOTE_PROC_TRANSACTIONS auf Verbindungsebene kann die Standardeinstellung der Instanz überschrieben werden, die von sp_configure remote proc trans angegeben wird. Wenn diese Option aktiviert ist, bewirkt der Aufruf einer remote gespeicherten Prozedur, dass eine lokale Transaktion zu einer verteilten Transaktion höher gestuft wird.The connection-level SET option REMOTE_PROC_TRANSACTIONS can be used to override the instance default established by sp_configure remote proc trans. With this option set on, a remote stored procedure call causes a local transaction to be promoted to a distributed transaction. Die Verbindung, die die MS DTC-Transaktion erstellt, wird Urheber der Transaktion.The connection that creates the MS DTC transaction becomes the originator for the transaction. COMMIT TRANSACTION startet einen von MS DTC koordinierten Commit.COMMIT TRANSACTION initiates an MS DTC coordinated commit. Ist die Option sp_configure remote proc trans aktiviert, werden Aufrufe von remote gespeicherten Prozeduren in lokalen Transaktionen automatisch als Teil einer verteilten Transaktion geschützt, ohne dass Anwendungen derart neu geschrieben werden müssen, dass speziell BEGIN DISTRIBUTED TRANSACTION statt BEGIN TRANSACTION ausgegeben wird.If the sp_configure remote proc trans option is ON, remote stored procedure calls in local transactions are automatically protected as part of distributed transactions without having to rewrite applications to specifically issue BEGIN DISTRIBUTED TRANSACTION instead of BEGIN TRANSACTION.

Weitere Informationen zur verteilten Transaktionsumgebung und zum verteilten Transaktionsprozess finden Sie in der Dokumentation zu MicrosoftMicrosoft Distributed Transaction Coordinator.For more information about the distributed transaction environment and process, see the MicrosoftMicrosoft Distributed Transaction Coordinator documentation.

BerechtigungenPermissions

Erfordert die Mitgliedschaft in der public-Rolle.Requires membership in the public role.

BeispieleExamples

In diesem Beispiel wird ein Kandidat aus der AdventureWorks2012AdventureWorks2012-Datenbank sowohl auf der lokalen Instanz von Datenbank-EngineDatabase Engine als auch auf einer Instanz auf einem Remoteserver gelöscht.This example deletes a candidate from the AdventureWorks2012AdventureWorks2012 database on both the local instance of the Datenbank-EngineDatabase Engine and an instance on a remote server. Für die Transaktion wird sowohl in der lokalen Datenbank als auch in der Remotedatenbank entweder ein Commit oder ein Rollback ausgeführt.Both the local and remote databases will either commit or roll back the transaction.

Hinweis

Wenn MS DTC derzeit nicht auf dem Computer installiert ist, auf dem die Instanz von Datenbank-EngineDatabase Engine ausgeführt wird, erzeugt dieses Beispiel eine Fehlermeldung.Unless MS DTC is currently installed on the computer running the instance of the Datenbank-EngineDatabase Engine, this example produces an error message. Weitere Informationen zum Installieren von MS DTC finden Sie in der Dokumentation zu Microsoft Distributed Transaction Coordinator.For more information about installing MS DTC, see the Microsoft Distributed Transaction Coordinator documentation.

USE AdventureWorks2012;  
GO  
BEGIN DISTRIBUTED TRANSACTION;  
-- Delete candidate from local instance.  
DELETE AdventureWorks2012.HumanResources.JobCandidate  
    WHERE JobCandidateID = 13;  
-- Delete candidate from remote instance.  
DELETE RemoteServer.AdventureWorks2012.HumanResources.JobCandidate  
    WHERE JobCandidateID = 13;  
COMMIT TRANSACTION;  
GO  

Weitere InformationenSee Also

BEGIN TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL) COMMIT TRANSACTION (Transact-SQL)
COMMIT WORK (Transact-SQL) COMMIT WORK (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL) ROLLBACK TRANSACTION (Transact-SQL)
ROLLBACK WORK (Transact-SQL) ROLLBACK WORK (Transact-SQL)
SAVE TRANSACTION (Transact-SQL)SAVE TRANSACTION (Transact-SQL)