SET TRANSACTION ISOLATION LEVEL (Transact-SQL)SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2008) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Steuert das Verhalten von Sperren und der Zeilenversionsverwaltung von Transact-SQLTransact-SQL-Anweisungen, die von einer Verbindung mit SQL ServerSQL Server ausgestellt wurden.Controls the locking and row versioning behavior of Transact-SQLTransact-SQL statements issued by a connection to SQL ServerSQL Server.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server and Azure SQL Database

SET TRANSACTION ISOLATION LEVEL
    { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SNAPSHOT
    | SERIALIZABLE
    }
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

ArgumenteArguments

READ UNCOMMITTEDREAD UNCOMMITTED
Gibt an, dass Anweisungen Zeilen lesen können, die von anderen Transaktionen geändert wurden, für die jedoch noch kein Commit ausgeführt wurde.Specifies that statements can read rows that have been modified by other transactions but not yet committed.

Transaktionen, die auf der READ UNCOMMITTED-Ebene ausgeführt werden, geben keine gemeinsamen Sperren aus, die verhindern würden, dass andere Transaktionen Daten ändern, die von der aktuellen Transaktion gelesen werden.Transactions running at the READ UNCOMMITTED level do not issue shared locks to prevent other transactions from modifying data read by the current transaction. READ UNCOMMITTED-Transaktionen werden darüber hinaus nicht durch exklusive Sperren blockiert, die verhindern würden, dass die aktuelle Transaktion Zeilen liest, die von anderen Transaktionen geändert wurden, für die jedoch kein Commit ausgeführt wurde.READ UNCOMMITTED transactions are also not blocked by exclusive locks that would prevent the current transaction from reading rows that have been modified but not committed by other transactions. Wenn diese Option festgelegt wird, können Änderungen gelesen werden, für die kein Commit ausgeführt wurde (so genannte Dirty Reads).When this option is set, it is possible to read uncommitted modifications, which are called dirty reads. Datenwerte können geändert werden, und Zeilen können vor dem Transaktionsende im Dataset hinzugefügt oder entfernt werden.Values in the data can be changed and rows can appear or disappear in the data set before the end of the transaction. Diese Option hat dieselbe Auswirkung wie das Festlegen von NOLOCK für die Tabellen in allen SELECT-Anweisungen in einer Transaktion.This option has the same effect as setting NOLOCK on all tables in all SELECT statements in a transaction. Von allen Isolationsstufen ist diese am wenigsten restriktiv.This is the least restrictive of the isolation levels.

In SQL ServerSQL Server können Sie auch Konflikte zwischen Sperren minimieren und zugleich Transaktionen vor Dirty Reads von Datenänderungen, für die kein Commit ausgeführt wurde, folgendermaßen schützen:In SQL ServerSQL Server, you can also minimize locking contention while protecting transactions from dirty reads of uncommitted data modifications using either:

  • Verwendung der READ COMMITTED-Isolationsstufe und gleichzeitiges Festlegen der Datenbankoption READ_COMMITTED_SNAPSHOT auf ON.The READ COMMITTED isolation level with the READ_COMMITTED_SNAPSHOT database option set to ON.

  • Verwendung der SNAPSHOT-Isolationsstufe.The SNAPSHOT isolation level. Weitere Informationen zur Momentaufnahmeisolation finden Sie unter Momentaufnahmeisolation in SQL Server.For more information about snapshot isolation, see Snapshot Isolation in SQL Server.

    READ COMMITTEDREAD COMMITTED
    Gibt an, dass Anweisungen Zeilen nicht lesen können, die von anderen Transaktionen geändert wurden, für die jedoch noch kein Commit ausgeführt wurde.Specifies that statements cannot read data that has been modified but not committed by other transactions. Dadurch werden Dirty Reads verhindert.This prevents dirty reads. Daten können von anderen Transaktionen zwischen einzelnen Anweisungen innerhalb der aktuellen Transaktion geändert werden, was zu nicht wiederholbaren Lesevorgängen oder Phantomdaten führt.Data can be changed by other transactions between individual statements within the current transaction, resulting in nonrepeatable reads or phantom data. Diese Option ist die Standardeinstellung von SQL ServerSQL Server.This option is the SQL ServerSQL Server default.

    Das Verhalten von READ COMMITTED hängt von der Einstellung der Datenbankoption READ_COMMITTED_SNAPSHOT ab:The behavior of READ COMMITTED depends on the setting of the READ_COMMITTED_SNAPSHOT database option:

  • Wenn READ_COMMITTED_SNAPSHOT auf OFF (Standardeinstellung) festgelegt wird, verwendet Datenbank-EngineDatabase Engine freigegebene Sperren, um zu verhindern, dass andere Transaktionen Zeilen ändern, während die aktuelle Transaktion einen Lesevorgang ausführt.If READ_COMMITTED_SNAPSHOT is set to OFF (the default), the Datenbank-EngineDatabase Engine uses shared locks to prevent other transactions from modifying rows while the current transaction is running a read operation. Durch freigegebene Sperren wird außerdem verhindert, dass die Anweisung Zeilen, die von anderen Transaktionen geändert werden, erst nach Abschluss der anderen Transaktion lesen kann.The shared locks also block the statement from reading rows modified by other transactions until the other transaction is completed. Mit dem Typ der gemeinsamen Sperre wird festgelegt, wann die Sperre aufgehoben wird.The shared lock type determines when it will be released. Zeilensperren werden aufgehoben, bevor die nächste Zeile verarbeitet wird.Row locks are released before the next row is processed. Seitensperren werden aufgehoben, wenn die nächste Seite gelesen wird, und Tabellensperren werden aufgehoben, nachdem die Ausführung der Anweisung beendet wurde.Page locks are released when the next page is read, and table locks are released when the statement finishes.

  • Wenn READ_COMMITTED_SNAPSHOT auf ON festgelegt wird, verwendet Datenbank-EngineDatabase Engine die Zeilenversionsverwaltung, um jede Anweisung mit einer hinsichtlich der Transaktionen konsistenten Momentaufnahme der Daten so darzustellen, wie sie zu Beginn der Anweisung vorhanden waren.If READ_COMMITTED_SNAPSHOT is set to ON, the Datenbank-EngineDatabase Engine uses row versioning to present each statement with a transactionally consistent snapshot of the data as it existed at the start of the statement. Es werden keine Sperren verwendet, um die Daten vor Updates durch andere Transaktionen zu schützen.Locks are not used to protect the data from updates by other transactions.

Wichtig

Das Auswählen einer Transaktionsisolationsstufe hat keine Auswirkungen auf die Sperren, die zum Schutz der Datenänderung eingerichtet werden.Choosing a transaction isolation level does not affect the locks acquired to protect data modifications. Eine Transaktion erhält immer eine exklusive Sperre für alle von ihr geänderten Daten und hält diese Sperre bis zum Abschluss der Transaktion aufrecht, und zwar unabhängig davon, welche Isolationsstufe für diese Transaktion festgelegt wurde.A transaction always gets an exclusive lock on any data it modifies, and holds that lock until the transaction completes, regardless of the isolation level set for that transaction. Darüber hinaus verwendet ein auf der Isolationsstufe READ_COMMITTED ausgeführtes Update Aktualisierungssperren für die ausgewählten Datenzeilen, während ein auf der Isolationsstufe SNAPSHOT ausgeführtes Update Zeilenversionen verwendet, um die zu aktualisierenden Zeilen auszuwählen.Additionally, an update made at the READ_COMMITTED isolation level uses update locks on the data rows selected, whereas an update made at the SNAPSHOT isolation level uses row versions to select rows to update. Für Lesevorgänge wird durch die Transaktionsisolationsstufen in erster Linie der Grad des Schutzes vor den Auswirkungen der Änderungen definiert, die durch andere Transaktionen vorgenommen werden.For read operations, transaction isolation levels primarily define the level of protection from the effects of modifications made by other transactions. Weitere Informationen finden Sie im Handbuch zu Transaktionssperren und Zeilenversionsverwaltung.See the Transaction Locking and Row Versioning Guide for more information.

Hinweis

Die Momentaufnahmeisolation unterstützt FILESTREAM-Daten.Snapshot isolation supports FILESTREAM data. Im Momentaufnahmeisolationsmodus entsprechen die von einer beliebigen Anweisung in einer Transaktion gelesenen FILESTREAM-Daten der im Hinblick auf Transaktionen konsistenten Version der Daten, die zu Beginn der Transaktion vorhanden waren.Under snapshot isolation mode, FILESTREAM data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction.

Wenn die Datenbankoption READ_COMMITTED_SNAPSHOT auf ON festgelegt wird, können Sie mithilfe des READCOMMITTEDLOCK-Tabellenhinweises freigegebene Sperren anstelle der Zeilenversionsverwaltung für einzelne Anweisungen in Transaktionen anfordern, die auf der READ COMMITTED-Isolationsstufe ausgeführt werden.When the READ_COMMITTED_SNAPSHOT database option is ON, you can use the READCOMMITTEDLOCK table hint to request shared locking instead of row versioning for individual statements in transactions running at the READ COMMITTED isolation level.

Hinweis

Wenn Sie die Option READ_COMMITTED_SNAPSHOT festlegen, wird in der Datenbank nur die Verbindung zugelassen, die den ALTER DATABASE-Befehl ausführt.When you set the READ_COMMITTED_SNAPSHOT option, only the connection executing the ALTER DATABASE command is allowed in the database. So lange ALTER DATABASE nicht abgeschlossen ist, darf keine andere offene Verbindung in der Datenbank bestehen.There must be no other open connection in the database until ALTER DATABASE is complete. Die Datenbank muss sich nicht im Einzelbenutzermodus befinden.The database does not have to be in single-user mode.

REPEATABLE READREPEATABLE READ
Gibt an, dass Anweisungen keine Daten lesen können, die geändert wurden, für die jedoch noch kein Commit von anderen Transaktionen ausgeführt wurde. Darüber hinaus können von der aktuellen Transaktion gelesene Daten erst nach Abschluss der aktuellen Transaktion von anderen Transaktionen geändert werden.Specifies that statements cannot read data that has been modified but not yet committed by other transactions and that no other transactions can modify data that has been read by the current transaction until the current transaction completes.

Freigegebene Sperren werden auf alle Daten angewendet, die von den Anweisungen in der Transaktion gelesen werden, und werden bis zum Abschluss der Transaktion aufrecht erhalten.Shared locks are placed on all data read by each statement in the transaction and are held until the transaction completes. Dadurch wird verhindert, dass andere Transaktionen Zeilen ändern, die von der aktuellen Transaktion gelesen wurden.This prevents other transactions from modifying any rows that have been read by the current transaction. Andere Transaktionen können neue Zeilen in Übereinstimmung mit den Suchbedingungen von Anweisungen einfügen, die von der aktuellen Transaktion ausgegeben wurden.Other transactions can insert new rows that match the search conditions of statements issued by the current transaction. Wenn die aktuelle Transaktion dann die Anweisung wiederholt, werden die neuen Zeilen abgerufen, was Phantomlesezugriffe zur Folge hat.If the current transaction then retries the statement it will retrieve the new rows, which results in phantom reads. Da freigegebene Sperren nicht am Ende jeder Anweisung aufgehoben werden, sondern bis zum Ende einer Transaktion aufrechterhalten werden, ist die Parallelität geringer als die der READ COMMITTED-Standardisolationsstufe.Because shared locks are held to the end of a transaction instead of being released at the end of each statement, concurrency is lower than the default READ COMMITTED isolation level. Verwenden Sie diese Option nur, wenn sie wirklich erforderlich ist.Use this option only when necessary.

SNAPSHOTSNAPSHOT
Gibt an, dass von Anweisungen in einer Transaktion gelesene Daten der im Hinblick auf Transaktionen konsistenten Version der Daten entsprechen, die zu Beginn der Transaktion vorhanden waren.Specifies that data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction. Die Transaktion kann nur Datenänderungen erkennen, für die vor dem Beginn der Transaktion ein Commit ausgeführt wurde.The transaction can only recognize data modifications that were committed before the start of the transaction. Datenänderungen, die nach Beginn der aktuellen Transaktion von anderen Transaktionen vorgenommen wurden, sind für in der aktuellen Transaktion ausgeführte Anweisungen nicht sichtbar.Data modifications made by other transactions after the start of the current transaction are not visible to statements executing in the current transaction. So entsteht der Eindruck, als ob die Anweisungen in einer Transaktion eine Momentaufnahme der Daten erhalten, für die ein Commit ausgeführt wurde, wie sie zu Beginn der Transaktion vorhanden waren.The effect is as if the statements in a transaction get a snapshot of the committed data as it existed at the start of the transaction.

Außer bei der Wiederherstellung einer Datenbank fordern SNAPSHOT-Transaktionen beim Lesen von Daten keine Sperren an.Except when a database is being recovered, SNAPSHOT transactions do not request locks when reading data. SNAPSHOT-Transaktionen, die Daten lesen, halten andere Transaktionen nicht vom Schreiben von Daten ab.SNAPSHOT transactions reading data do not block other transactions from writing data. Transaktionen, die Daten schreiben, halten SNAPSHOT-Transaktionen nicht vom Lesen von Daten ab.Transactions writing data do not block SNAPSHOT transactions from reading data.

Während des Rollbacks einer Datenbankwiederherstellung fordern SNAPSHOT-Transaktionen eine Sperre an, wenn das Lesen von Daten versucht wird, die von einer anderen Transaktion gesperrt sind, für die gerade ein Rollback ausgeführt wird.During the roll-back phase of a database recovery, SNAPSHOT transactions will request a lock if an attempt is made to read data that is locked by another transaction that is being rolled back. Die SNAPSHOT-Transaktion bleibt so lange gesperrt, bis der Rollback der Transaktion ausgeführt ist.The SNAPSHOT transaction is blocked until that transaction has been rolled back. Die Sperre wird unmittelbar nach dem Erteilen aufgehoben.The lock is released immediately after it has been granted.

Die Datenbankoption ALLOW_SNAPSHOT_ISOLATION muss auf ON festgelegt werden, bevor Sie eine Transaktion auf der SNAPSHOT-Isolationsstufe starten können.The ALLOW_SNAPSHOT_ISOLATION database option must be set to ON before you can start a transaction that uses the SNAPSHOT isolation level. Greift eine Transaktion auf der SNAPSHOT-Isolationsstufe auf Daten in mehreren Datenbanken zu, muss ALLOW_SNAPSHOT_ISOLATION in jeder Datenbank auf ON festgelegt werden.If a transaction using the SNAPSHOT isolation level accesses data in multiple databases, ALLOW_SNAPSHOT_ISOLATION must be set to ON in each database.

Die SNAPSHOT-Isolationsstufe kann nicht für Transaktionen festgelegt werden, die sich zu Beginn auf einer anderen Isolationsstufe befanden. Dies hat den Abbruch der Transaktion zur Folge.A transaction cannot be set to SNAPSHOT isolation level that started with another isolation level; doing so will cause the transaction to abort. Wenn sich eine Transaktion zu Beginn auf der SNAPSHOT-Isolationsstufe befindet, ist der Wechsel zu einer anderen Isolationsstufe und dem anschließenden Wechsel zurück zu SNAPSHOT möglich.If a transaction starts in the SNAPSHOT isolation level, you can change it to another isolation level and then back to SNAPSHOT. Eine Transaktion wird mit dem erstmaligen Zugriff auf Daten gestartet.A transaction starts the first time it accesses data.

Eine Transaktion, die auf der SNAPSHOT-Isolationsstufe ausgeführt wird, kann Änderungen anzeigen, die von dieser Transaktion vorgenommen wurden.A transaction running under SNAPSHOT isolation level can view changes made by that transaction. Führt die Transaktion beispielsweise eine UPDATE-Anweisung für eine Tabelle aus und gibt dann eine SELECT-Anweisung für dieselbe Tabelle aus, werden die geänderten Daten in das Resultset eingeschlossen.For example, if the transaction performs an UPDATE on a table and then issues a SELECT statement against the same table, the modified data will be included in the result set.

Hinweis

Im Momentaufnahmeisolationsmodus entsprechen die von einer beliebigen Anweisung in einer Transaktion gelesenen FILESTREAM-Daten der im Hinblick auf Transaktionen konsistenten Version der Daten, die zu Beginn der Transaktion und nicht zu Beginn der Anweisung vorhanden waren.Under snapshot isolation mode, FILESTREAM data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction, not at the start of the statement.

SERIALIZABLESERIALIZABLE
Gibt Folgendes an:Specifies the following:

  • Anweisungen können keine Daten lesen, die geändert wurden, für die jedoch noch kein Commit von anderen Transaktionen ausgeführt wurde.Statements cannot read data that has been modified but not yet committed by other transactions.

  • Andere Transaktionen können Daten, die von der aktuellen Transaktion gelesen werden, erst dann ändern, wenn die aktuelle Transaktion abgeschlossen ist.No other transactions can modify data that has been read by the current transaction until the current transaction completes.

  • Andere Transaktionen können erst nach Abschluss der aktuellen Transaktion neue Zeilen mit Schlüsselwerten einfügen, die in den von Anweisungen in der aktuellen Transaktion gelesenen Schlüsselbereich fallen.Other transactions cannot insert new rows with key values that would fall in the range of keys read by any statements in the current transaction until the current transaction completes.

    Bereichssperren werden in den Schlüsselwertbereichen eingerichtet, die die Suchbedingungen der in einer Transaktion ausgeführten Anweisungen erfüllen.Range locks are placed in the range of key values that match the search conditions of each statement executed in a transaction. Dadurch wird verhindert, dass andere Transaktionen Zeilen aktualisieren oder einfügen, die den von der aktuellen Transaktion ausgeführten Anweisungen entsprechen würden.This blocks other transactions from updating or inserting any rows that would qualify for any of the statements executed by the current transaction. Werden also Anweisungen in einer Transaktion ein zweites Mal ausgeführt, lesen diese dieselbe Zeilengruppe.This means that if any of the statements in a transaction are executed a second time, they will read the same set of rows. Die Bereichssperren werden bis zum Abschluss der Transaktion aufrechterhalten.The range locks are held until the transaction completes. Diese Isolationsstufe ist am restriktivsten, da gesamte Schlüsselbereiche gesperrt werden, und die Sperren bis zum Abschluss der Transaktion aufrechterhalten werden.This is the most restrictive of the isolation levels because it locks entire ranges of keys and holds the locks until the transaction completes. Da die Parallelität geringer ist, verwenden Sie diese Option nur, wenn es notwendig ist.Because concurrency is lower, use this option only when necessary. Diese Option hat dieselbe Auswirkung wie das Festlegen von HOLDLOCK für die Tabellen in allen SELECT-Anweisungen in einer Transaktion.This option has the same effect as setting HOLDLOCK on all tables in all SELECT statements in a transaction.

RemarksRemarks

Es können nicht mehrere Isolationsstufenoptionen gleichzeitig festgelegt werden; eine Option bleibt für die Dauer der Verbindung festgelegt, wenn sie nicht explizit geändert wird.Only one of the isolation level options can be set at a time, and it remains set for that connection until it is explicitly changed. Alle Lesevorgänge innerhalb der Transaktion unterliegen den Regeln der angegebenen Isolationsstufe, es sei denn, ein Tabellenhinweis in der FROM-Klausel einer Anweisung gibt ein anderes Sperr- oder Versionsverwaltungsverhalten für eine Tabelle an.All read operations performed within the transaction operate under the rules for the specified isolation level unless a table hint in the FROM clause of a statement specifies different locking or versioning behavior for a table.

Die Transaktionsisolationsstufen definieren die Typen von Sperren, die für Lesevorgänge angefordert werden.The transaction isolation levels define the type of locks acquired on read operations. Freigegebene Sperren für READ COMMITTED oder REPEATABLE READ sind im Allgemeinen Zeilensperren, die jedoch auf Seiten- oder Tabellensperren ausgeweitet werden können, wenn beim Lesevorgang auf viele Zeilen auf einer Seite oder in einer Tabelle verwiesen wird.Shared locks acquired for READ COMMITTED or REPEATABLE READ are generally row locks, although the row locks can be escalated to page or table locks if a significant number of the rows in a page or table are referenced by the read. Wenn eine Zeile nach dem Lesen durch die Transaktion geändert wird, fordert die Transaktion eine exklusive Sperre an, um diese Zeile zu schützen. Die exklusive Sperre wird bis zum Abschluss der Transaktion aufrechterhalten.If a row is modified by the transaction after it has been read, the transaction acquires an exclusive lock to protect that row, and the exclusive lock is retained until the transaction completes. Verfügt beispielsweise eine REPEATABLE READ-Transaktion über eine freigegebene Sperre für eine Zeile, und die Zeile wird dann durch die Transaktion geändert, wird die freigegebene Zeilensperre in eine exklusive Zeilensperre konvertiert.For example, if a REPEATABLE READ transaction has a shared lock on a row, and the transaction then modifies the row, the shared row lock is converted to an exclusive row lock.

Mit einer Ausnahme können Sie während einer Transaktion jederzeit von einer Isolationsstufe zu einer anderen wechseln.With one exception, you can switch from one isolation level to another at any time during a transaction. Die Ausnahme tritt auf, wenn von einer beliebigen Isolationsstufe zur SNAPSHOT-Isolation gewechselt wird.The exception occurs when changing from any isolation level to SNAPSHOT isolation. Dadurch erzeugt die Transaktion einen Fehler und führt ein Rollback aus.Doing this causes the transaction to fail and roll back. Sie können jedoch bei einer mit SNAPSHOT-Isolation gestarteten Transaktion zu einer beliebigen anderen Isolationsstufe wechseln.However, you can change a transaction started in SNAPSHOT isolation to any other isolation level.

Beim Wechsel der Isolationsstufe einer Transaktion werden Ressourcen, die nach dem Wechsel gelesen werden, gemäß den Regeln der neuen Isolationsstufe geschützt.When you change a transaction from one isolation level to another, resources that are read after the change are protected according to the rules of the new level. Für Ressourcen, die vor dem Wechsel gelesen werden, gelten weiterhin die Regeln der bisherigen Isolationsstufe.Resources that are read before the change continue to be protected according to the rules of the previous level. Wenn eine Transaktion beispielsweise von READ COMMITTED nach SERIALIZABLE wechselt, werden die nach dem Wechsel angeforderten freigegebenen Sperren nun bis zum Ende der Transaktion aufrechterhalten.For example, if a transaction changed from READ COMMITTED to SERIALIZABLE, the shared locks acquired after the change are now held until the end of the transaction.

Wenn Sie SET TRANSACTION ISOLATION LEVEL in einer gespeicherten Prozedur oder einem Trigger ausgeben, wird die Isolationsstufe auf die Stufe zurückgesetzt, die beim Aufrufen des Objekts Gültigkeit hatte, wenn das Objekt die Steuerung zurückgibt.If you issue SET TRANSACTION ISOLATION LEVEL in a stored procedure or trigger, when the object returns control the isolation level is reset to the level in effect when the object was invoked. Wenn Sie beispielsweise REPEATABLE READ in einem Batch festlegen und der Batch dann eine gespeicherte Prozedur aufruft, die die Isolationsstufe auf SERIALIZABLE festlegt, wird die Einstellung der Isolationsstufe auf REPEATABLE READ zurückgesetzt, wenn die gespeicherte Prozedur die Steuerung an den Batch zurückgibt.For example, if you set REPEATABLE READ in a batch, and the batch then calls a stored procedure that sets the isolation level to SERIALIZABLE, the isolation level setting reverts to REPEATABLE READ when the stored procedure returns control to the batch.

Hinweis

Benutzerdefinierte Funktionen und CLR-benutzerdefinierte Typen (Common Language Runtime) können SET TRANSACTION ISOLATION LEVEL nicht ausführen.User-defined functions and common language runtime (CLR) user-defined types cannot execute SET TRANSACTION ISOLATION LEVEL. Sie können die Isolationsstufe jedoch mithilfe eines Tabellenhinweises überschreiben.However, you can override the isolation level by using a table hint. Weitere Informationen finden Sie unter Tabellenhinweise (Transact-SQL).For more information, see Table Hints (Transact-SQL).

Wird sp_bindsession zum Binden zweier Sitzungen verwendet, behält jede Sitzung die eigene Isolationsstufeneinstellung bei.When you use sp_bindsession to bind two sessions, each session retains its isolation level setting. Das Verwenden von SET TRANSACTION ISOLATION LEVEL zum Ändern der Isolationsstufeneinstellung einer Sitzung wirkt sich nicht auf die Einstellung anderer gebundener Sitzungen aus.Using SET TRANSACTION ISOLATION LEVEL to change the isolation level setting of one session does not affect the setting of any other sessions bound to it.

SET TRANSACTION ISOLATION LEVEL wird zur Ausführungszeit und nicht zur Analysezeit wirksam.SET TRANSACTION ISOLATION LEVEL takes effect at execute or run time, and not at parse time.

Durch optimierte Massenladevorgänge für Heaps werden Abfragen blockiert, die unter den folgenden Isolationsstufen ausgeführt werden:Optimized bulk load operations on heaps block queries that are running under the following isolation levels:

  • SNAPSHOTSNAPSHOT

  • READ UNCOMMITTEDREAD UNCOMMITTED

  • READ COMMITTED mithilfe der ZeilenversionsverwaltungREAD COMMITTED using row versioning

    Umgekehrt werden durch Abfragen, die unter diesen Isolationsstufen ausgeführt werden, optimierte Massenladevorgänge für Heaps blockiert.Conversely, queries that run under these isolation levels block optimized bulk load operations on heaps. Weitere Informationen zu Massenladevorgängen finden Sie unter Massenimport und -export von Daten (SQL Server).For more information about bulk load operations, see Bulk Import and Export of Data (SQL Server).

    FILESTREAM-aktivierte Datenbanken unterstützen die folgenden Transaktionsisolationsstufen.FILESTREAM-enabled databases support the following transaction isolation levels.

IsolationsstufeIsolation level Transact-SQL-ZugriffTransact SQL access DateisystemzugriffFile system access
Read UncommittedRead uncommitted SQL Server 2017SQL Server 2017 Nicht unterstütztUnsupported
Read CommittedRead committed SQL Server 2017SQL Server 2017 SQL Server 2017SQL Server 2017
Repeatable ReadRepeatable read SQL Server 2017SQL Server 2017 Nicht unterstütztUnsupported
SerializableSerializable SQL Server 2017SQL Server 2017 Nicht unterstütztUnsupported
Read committed snapshotRead committed snapshot SQL Server 2017SQL Server 2017 SQL Server 2017SQL Server 2017
MomentaufnahmeSnapshot SQL Server 2017SQL Server 2017 SQL Server 2017SQL Server 2017

BeispieleExamples

Im folgenden Beispiel wird TRANSACTION ISOLATION LEVEL für die Sitzung festgelegt.The following example sets the TRANSACTION ISOLATION LEVEL for the session. Für alle folgenden Transact-SQLTransact-SQL-Anweisungen erhält SQL ServerSQL Server alle freigegebenen Sperren bis zum Abschluss der Transaktion aufrecht.For each Transact-SQLTransact-SQL statement that follows, SQL ServerSQL Server holds all of the shared locks until the end of the transaction.

USE AdventureWorks2012;  
GO  
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;  
GO  
BEGIN TRANSACTION;  
GO  
SELECT *   
    FROM HumanResources.EmployeePayHistory;  
GO  
SELECT *   
    FROM HumanResources.Department;  
GO  
COMMIT TRANSACTION;  
GO  

Weitere Informationen finden Sie unterSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
DBCC USEROPTIONS (Transact-SQL) DBCC USEROPTIONS (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
SET-Anweisungen (Transact-SQL) SET Statements (Transact-SQL)
Tabellenhinweise (Transact-SQL)Table Hints (Transact-SQL)