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

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Controlla il funzionamento relativo ai blocchi e al controllo delle versioni delle righe per le istruzioni Transact-SQLTransact-SQL eseguite tramite una connessione a SQL ServerSQL Server.Controls the locking and row versioning behavior of Transact-SQLTransact-SQL statements issued by a connection to SQL ServerSQL Server.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- 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

ArgomentiArguments

READ UNCOMMITTEDREAD UNCOMMITTED
Specifica che le istruzioni possono leggere le righe modificate da altre transazioni ma di cui non è ancora stato eseguito il commit.Specifies that statements can read rows that have been modified by other transactions but not yet committed.

Le transazioni eseguite al livello READ UNCOMMITTED non acquisiscono blocchi condivisi per evitare che altre transazioni possano modificare i dati letti dalla transazione corrente.Transactions running at the READ UNCOMMITTED level do not issue shared locks to prevent other transactions from modifying data read by the current transaction. Le transazioni READ UNCOMMITTED, inoltre, non vengono bloccate con blocchi esclusivi che impedirebbero alla transazione corrente di leggere righe modificate da altre transazioni, ma di cui non è stato eseguito il commit.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. Con l'impostazione di questa opzione è possibile leggere modifiche di cui non è stato eseguito il commit, operazione definita lettura dirty.When this option is set, it is possible to read uncommitted modifications, which are called dirty reads. Prima della fine della transazione è quindi possibile che i dati vengano modificati e che le righe compaiano e scompaiano nel set di dati.Values in the data can be changed and rows can appear or disappear in the data set before the end of the transaction. Questa opzione equivale all'impostazione NOLOCK per tutte le tabelle in tutte le istruzioni SELECT di una transazione.This option has the same effect as setting NOLOCK on all tables in all SELECT statements in a transaction. Tra i livelli di isolamento disponibili, questo è il meno restrittivo.This is the least restrictive of the isolation levels.

In SQL ServerSQL Server è inoltre possibile utilizzare le impostazioni seguenti per ridurre al minimo la contesa dei blocchi pur proteggendo le transazioni da letture dirty di modifiche dei dati di cui non è stato eseguito il commit:In SQL ServerSQL Server, you can also minimize locking contention while protecting transactions from dirty reads of uncommitted data modifications using either:

  • Livello di isolamento READ COMMITTED con l'opzione di database READ_COMMITTED_SNAPSHOT impostata su ON.The READ COMMITTED isolation level with the READ_COMMITTED_SNAPSHOT database option set to ON.

  • Livello di isolamento SNAPSHOT.The SNAPSHOT isolation level. Per altre informazioni sull'isolamento dello snapshot, vedere Isolamento dello Snapshot in SQL Server.For more information about snapshot isolation, see Snapshot Isolation in SQL Server.

READ COMMITTEDREAD COMMITTED
Specifica che le istruzioni non possono leggere i dati modificati da altre transazioni ma di cui non è stato eseguito il commit.Specifies that statements cannot read data that has been modified but not committed by other transactions. In questo modo vengono evitate letture dirty.This prevents dirty reads. Altre transazioni possono modificare i dati nell'intervallo tra le singole istruzioni della transazione corrente, con conseguenze come letture irripetibili e la presenza di dati fantasma.Data can be changed by other transactions between individual statements within the current transaction, resulting in nonrepeatable reads or phantom data. Questa è l'opzione predefinita in SQL ServerSQL Server.This option is the SQL ServerSQL Server default.

Il funzionamento di READ COMMITTED varia a seconda dell'impostazione dell'opzione di database READ_COMMITTED_SNAPSHOT:The behavior of READ COMMITTED depends on the setting of the READ_COMMITTED_SNAPSHOT database option:

  • Se l'opzione READ_COMMITTED_SNAPSHOT è impostata su OFF (impostazione predefinita in SQL Server), Motore di databaseDatabase Engine usa blocchi condivisi per impedire che altre transazioni possano modificare le righe mentre la transazione corrente sta eseguendo un'operazione di lettura.If READ_COMMITTED_SNAPSHOT is set to OFF (the default on SQL Server), the Motore di databaseDatabase Engine uses shared locks to prevent other transactions from modifying rows while the current transaction is running a read operation. I blocchi condivisi impediscono inoltre che l'istruzione possa leggere righe modificate da altre transazioni, fino al completamento di tali transazioni.The shared locks also block the statement from reading rows modified by other transactions until the other transaction is completed. Il tipo di blocco condiviso determina il momento in cui verrà rilasciato.The shared lock type determines when it will be released. I blocchi a livello di riga vengono rilasciati prima dell'elaborazione della riga successiva.Row locks are released before the next row is processed. I blocchi a livello di pagina vengono rilasciati nel momento in cui la pagina successiva viene letta, mentre i blocchi di tabella vengono rilasciati al termine dell'istruzione.Page locks are released when the next page is read, and table locks are released when the statement finishes.

  • Se READ_COMMITTED_SNAPSHOT è impostata su ON (impostazione predefinita nel database SQL di Azure), Motore di databaseDatabase Engine usa il controllo delle versioni delle righe per presentare a ogni istruzione uno snapshot dei dati coerente dal punto di vista transazionale, rappresentativo dei dati esistenti al momento dell'avvio dell'istruzione.If READ_COMMITTED_SNAPSHOT is set to ON (the default on SQL Azure Database), the Motore di databaseDatabase 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. Non vengono utilizzati blocchi per proteggere i dati da aggiornamenti eseguiti da altre transazioni.Locks are not used to protect the data from updates by other transactions.

Importante

La scelta di un livello di isolamento delle transazioni non ha effetto sui blocchi acquisiti per proteggere le modifiche dei dati.Choosing a transaction isolation level does not affect the locks acquired to protect data modifications. Una transazione ottiene sempre un blocco esclusivo su qualsiasi dato da essa modificato, che mantiene fino al suo completamento, indipendentemente dal livello di isolamento impostato per la transazione.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. Inoltre, un aggiornamento effettuato a livello di isolamento READ_COMMITTED usa blocchi di aggiornamento sulle righe di dati selezionate, mentre un aggiornamento effettuato a livello di isolamento SNAPSHOT usa versioni di riga per selezionare le righe da aggiornare.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. Per le operazioni di lettura, i livelli di isolamento delle transazioni definiscono essenzialmente il livello di protezione dagli effetti delle modifiche apportate da altre transazioni.For read operations, transaction isolation levels primarily define the level of protection from the effects of modifications made by other transactions. Per altre informazioni vedere Guida per il controllo delle versioni delle righe e il blocco della transazione.See the Transaction Locking and Row Versioning Guide for more information.

Nota

L'isolamento dello snapshot supporta dati FILESTREAM.Snapshot isolation supports FILESTREAM data. In modalità di isolamento dello snapshot, i dati letti da qualsiasi istruzione in una transazione rappresenteranno la versione consistente dal punto di vista transazionale dei dati presenti all'avvio della transazione.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.

Quando l'opzione di database READ_COMMITTED_SNAPSHOT è impostata su ON, è possibile utilizzare l'hint di tabella READCOMMITTEDLOCK per richiedere il blocco condiviso anziché il controllo delle versioni delle righe per singole istruzioni delle transazioni eseguite con il livello di isolamento READ COMMITTED.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.

Nota

Quando si imposta l'opzione READ_COMMITTED_SNAPSHOT, nel database è consentita solo la connessione che esegue il comando ALTER DATABASE.When you set the READ_COMMITTED_SNAPSHOT option, only the connection executing the ALTER DATABASE command is allowed in the database. Nel database non devono essere presenti altre connessioni aperte fino al completamento del comando ALTER DATABASE.There must be no other open connection in the database until ALTER DATABASE is complete. Il database non deve essere in modalità utente singolo.The database does not have to be in single-user mode.

REPEATABLE READREPEATABLE READ
Specifica che le istruzioni non possono leggere dati modificati da altre transazioni di cui non è ancora stato eseguito il commit e che nessun'altra transazione può modificare i dati letti dalla transazione corrente, fino al completamento della transazione corrente.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.

Vengono acquisiti blocchi condivisi per tutti i dati letti da ogni istruzione della transazione e tali blocchi vengono mantenuti attivi fino al completamento della transazione.Shared locks are placed on all data read by each statement in the transaction and are held until the transaction completes. Ciò impedisce ad altre transazioni di modificare qualsiasi riga letta dalla transazione corrente.This prevents other transactions from modifying any rows that have been read by the current transaction. Altre transazioni possono inserire nuove righe, se tali righe corrispondono alle condizioni di ricerca delle istruzioni eseguite dalla transazione corrente.Other transactions can insert new rows that match the search conditions of statements issued by the current transaction. Se la transazione corrente ripete l'istruzione in seguito, verranno recuperate le nuove righe con conseguenti letture fantasma.If the current transaction then retries the statement it will retrieve the new rows, which results in phantom reads. Poiché i blocchi condivisi vengono mantenuti attivi fino alla fine di una transazione, anziché essere rilasciati alla fine di ogni istruzione, il livello di concorrenza è inferiore rispetto a quello consentito dal livello di isolamento predefinito READ COMMITTED.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. Utilizzare questa opzione solo se necessario.Use this option only when necessary.

SNAPSHOTSNAPSHOT
Specifica che i dati letti da qualsiasi istruzione in una transazione rappresenteranno la versione coerente dal punto di vista transazionale dei dati esistenti al momento dell'avvio della transazione.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. La transazione può quindi accedere solo alle modifiche dei dati di cui è stato eseguito il commit prima dell'avvio della transazione.The transaction can only recognize data modifications that were committed before the start of the transaction. Le modifiche ai dati apportate da altre transazioni dopo l'avvio della transazione corrente non sono visibili per le istruzioni eseguite nella transazione corrente.Data modifications made by other transactions after the start of the current transaction are not visible to statements executing in the current transaction. Di conseguenza, è come se le istruzioni di una transazione ottenessero uno snapshot dei dati di cui è stato eseguito il commit corrispondente ai dati presenti all'avvio della transazione.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.

Con l'eccezione delle operazioni di recupero di un database, le transazioni SNAPSHOT non richiedono blocchi per la lettura dei dati.Except when a database is being recovered, SNAPSHOT transactions do not request locks when reading data. Le transazioni SNAPSHOT che eseguono letture di dati non impediscono la scrittura di dati da altre transazioni.SNAPSHOT transactions reading data do not block other transactions from writing data. Viceversa, le transazioni che eseguono scritture di dati non impediscono la lettura di dati da transazioni SNAPSHOT.Transactions writing data do not block SNAPSHOT transactions from reading data.

Durante la fase di rollback di un'operazione di recupero di un database, le transazioni SNAPSHOT richiederanno un blocco se viene eseguito un tentativo di lettura di dati bloccati da un'altra transazione per cui è in corso il rollback.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. In questo caso, la transazione SNAPSHOT viene bloccata fino al completamento del rollback dell'altra transazione.The SNAPSHOT transaction is blocked until that transaction has been rolled back. Il blocco viene rilasciato immediatamente dopo essere stato concesso.The lock is released immediately after it has been granted.

È necessario impostare l'opzione di database ALLOW_SNAPSHOT_ISOLATION su ON prima di avviare una transazione che utilizza il livello di isolamento SNAPSHOT.The ALLOW_SNAPSHOT_ISOLATION database option must be set to ON before you can start a transaction that uses the SNAPSHOT isolation level. Se una transazione che utilizza il livello di isolamento SNAPSHOT accede a dati in più database, l'opzione ALLOW_SNAPSHOT_ISOLATION deve essere impostata su ON in ogni database.If a transaction using the SNAPSHOT isolation level accesses data in multiple databases, ALLOW_SNAPSHOT_ISOLATION must be set to ON in each database.

Non è possibile impostare il livello di isolamento SNAPSHOT per una transazione avviata con un altro livello di isolamento. In questo caso la transazione verrà interrotta.A transaction cannot be set to SNAPSHOT isolation level that started with another isolation level; doing so will cause the transaction to abort. Se la transazione viene avviata con il livello di isolamento SNAPSHOT, è invece possibile cambiare il livello di isolamento e quindi reimpostare il livello SNAPSHOT.If a transaction starts in the SNAPSHOT isolation level, you can change it to another isolation level and then back to SNAPSHOT. Una transazione viene avviata la prima volta che accede a dati.A transaction starts the first time it accesses data.

Una transazione eseguita con il livello di isolamento SNAPSHOT può visualizzare le modifiche apportate dalla transazione stessa.A transaction running under SNAPSHOT isolation level can view changes made by that transaction. Ad esempio, se la transazione esegue un'operazione UPDATE su una tabella e quindi esegue un'istruzione SELECT sulla stessa tabella, i dati modificati verranno inclusi nel set dei risultati.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.

Nota

In modalità di isolamento dello snapshot, i dati letti da qualsiasi istruzione in una transazione rappresenteranno la versione consistente dal punto di vista transazionale dei dati presenti all'avvio della transazione, non all'avvio dell'istruzione.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
Specifica quanto segue:Specifies the following:

  • Le istruzioni non possono leggere dati modificati da altre transazioni ma di cui non è ancora stato eseguito il commit.Statements cannot read data that has been modified but not yet committed by other transactions.

  • Nessun'altra transazione può modificare i dati letti dalla transazione corrente fino al completamento della transazione corrente.No other transactions can modify data that has been read by the current transaction until the current transaction completes.

  • Nessun'altra transazione può inserire nuove righe con valori di chiave che rientrerebbero nell'intervallo di chiavi lette da qualsiasi istruzione nella transazione corrente, fino al completamento della transazione corrente.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.

Vengono acquisiti blocchi di intervalli di chiavi per l'intervallo dei valori di chiave corrispondenti alle condizioni di ricerca di ogni istruzione eseguita in una transazione.Range locks are placed in the range of key values that match the search conditions of each statement executed in a transaction. In questo modo si impedisce che altre transazioni possano aggiornare o inserire righe qualificate per l'esecuzione di qualsiasi istruzione della transazione corrente.This blocks other transactions from updating or inserting any rows that would qualify for any of the statements executed by the current transaction. Ciò significa che in caso di ripetizione di una delle istruzioni di una transazione, la lettura restituirà lo stesso set di righe.This means that if any of the statements in a transaction are executed a second time, they will read the same set of rows. I blocchi di intervalli di chiavi vengono mantenuti attivi fino al completamento della transazione.The range locks are held until the transaction completes. Questo è il livello di isolamento più restrittivo tra quelli disponibili, perché blocca interi intervalli di chiavi e mantiene attivi tali blocchi fino al completamento della transazione.This is the most restrictive of the isolation levels because it locks entire ranges of keys and holds the locks until the transaction completes. Poiché la concorrenza è inferiore, utilizzare questa opzione solo quando è strettamente necessario.Because concurrency is lower, use this option only when necessary. Questa opzione equivale all'impostazione di HOLDLOCK per tutte le tabelle in tutte le istruzioni SELECT di una transazione.This option has the same effect as setting HOLDLOCK on all tables in all SELECT statements in a transaction.

RemarksRemarks

È possibile impostare una sola opzione di livello di isolamento alla volta. Tale impostazione rimane valida per la connessione fino a quando non viene modificata in modo esplicito.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. Tutte le operazioni di lettura eseguite nell'ambito della transazione rispettano le regole del livello di isolamento specificato a meno che un hint di tabella nella clausola FROM di un'istruzione non specifichi un funzionamento di blocco o di controllo delle versioni diverso per una tabella.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.

I livelli di isolamento delle transazioni definiscono i tipi di blocchi acquisiti per le operazioni di lettura.The transaction isolation levels define the type of locks acquired on read operations. I blocchi condivisi acquisiti per il livello READ COMMITTED o REPEATABLE READ sono in genere blocchi di riga, anche se è possibile che venga eseguita l'escalation a blocchi di pagina o di tabella, se la lettura fa riferimento a un numero significativo di righe in una pagina o una tabella.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. Se la transazione modifica una riga dopo la lettura, la transazione acquisisce un blocco esclusivo per proteggere tale riga e il blocco viene mantenuto attivo fino al completamento della transazione.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. Ad esempio, se una transazione REPEATABLE READ acquisisce un blocco condiviso su una riga e quindi modifica tale riga, il blocco di riga condiviso viene convertito in un blocco di riga esclusivo.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.

Con una sola eccezione, è possibile passare da un livello di isolamento a un altro in qualsiasi momento durante una transazione.With one exception, you can switch from one isolation level to another at any time during a transaction. L'eccezione si verifica quando si passa da un qualsiasi livello di isolamento all'isolamento SNAPSHOT.The exception occurs when changing from any isolation level to SNAPSHOT isolation. Questa operazione causa un errore nella transazione e il relativo rollback.Doing this causes the transaction to fail and roll back. È tuttavia possibile passare da una transazione avviata in isolamento SNAPSHOT a qualsiasi altro livello di isolamento.However, you can change a transaction started in SNAPSHOT isolation to any other isolation level.

Quando si modifica il livello di isolamento di una transazione, le risorse lette dopo la modifica saranno protette in base alle regole del nuovo livello.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. Le risorse lette prima della modifica continuano a essere protette in base alle regole del livello precedente.Resources that are read before the change continue to be protected according to the rules of the previous level. Se ad esempio una transazione viene modificata da READ COMMITTED a SERIALIZABLE, i blocchi condivisi acquisiti dopo la modifica vengono mantenuti fino alla fine della transazione.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.

Se si esegue l'istruzione SET TRANSACTION ISOLATION LEVEL in una stored procedure o un trigger, quando l'oggetto restituisce il controllo il livello di isolamento viene reimpostato sul livello attivo al momento della chiamata dell'oggetto.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. Ad esempio, se si imposta REPEATABLE READ in un batch e il batch chiama poi una stored procedure che imposta il livello di isolamento su SERIALIZABLE, il livello di isolamento verrà reimpostato su REPEATABLE READ quando la stored procedure restituisce il controllo al batch.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.

Nota

Le funzioni definite dall'utente e i tipi CLR (Common Language Runtime) definiti dall'utente non possono eseguire SET TRANSACTION ISOLATION LEVEL.User-defined functions and common language runtime (CLR) user-defined types cannot execute SET TRANSACTION ISOLATION LEVEL. È tuttavia possibile sostituire il livello di isolamento utilizzando un hint di tabella.However, you can override the isolation level by using a table hint. Per altre informazioni, vedere Hint di tabella (Transact-SQL).For more information, see Table Hints (Transact-SQL).

Quando si utilizza sp_bindsession per associare due sessioni, ogni sessione mantiene il livello di isolamento impostato.When you use sp_bindsession to bind two sessions, each session retains its isolation level setting. L'utilizzo dell'istruzione SET TRANSACTION ISOLATION LEVEL per modificare il livello di isolamento di una sessione non influisce sull'impostazione di qualsiasi altra sessione associata.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.

L'istruzione SET TRANSACTION ISOLATION LEVEL diventa effettiva in fase di esecuzione, non in fase di analisi.SET TRANSACTION ISOLATION LEVEL takes effect at execute or run time, and not at parse time.

Le operazioni ottimizzate di caricamento bulk negli heap bloccano le query eseguite con i livelli di isolamento seguenti:Optimized bulk load operations on heaps block queries that are running under the following isolation levels:

  • SNAPSHOTSNAPSHOT

  • READ UNCOMMITTEDREAD UNCOMMITTED

  • READ COMMITTED con utilizzo del controllo delle versioni delle righeREAD COMMITTED using row versioning

Al contrario, le query eseguite con tali livelli di isolamento bloccano le operazioni ottimizzate di caricamento bulk negli heap.Conversely, queries that run under these isolation levels block optimized bulk load operations on heaps. Per altre informazioni sulle operazioni di caricamento bulk, vedere Importazione ed esportazione bulk di dati (SQL Server).For more information about bulk load operations, see Bulk Import and Export of Data (SQL Server).

I database abilitati per FILESTREAM supportano i livelli di isolamento della transazione seguenti.FILESTREAM-enabled databases support the following transaction isolation levels.

Livello di isolamentoIsolation level Accesso Transact-SQLTransact SQL access Accesso al file systemFile system access
Read UncommittedRead uncommitted SQL Server 2017SQL Server 2017 Non supportatoUnsupported
Read CommittedRead committed SQL Server 2017SQL Server 2017 SQL Server 2017SQL Server 2017
Repeatable ReadRepeatable read SQL Server 2017SQL Server 2017 Non supportatoUnsupported
SerializableSerializable SQL Server 2017SQL Server 2017 Non supportatoUnsupported
Snapshot Read CommittedRead committed snapshot SQL Server 2017SQL Server 2017 SQL Server 2017SQL Server 2017
SnapshotSnapshot SQL Server 2017SQL Server 2017 SQL Server 2017SQL Server 2017

EsempiExamples

Nell'esempio seguente viene impostato il livello TRANSACTION ISOLATION LEVEL per la sessione.The following example sets the TRANSACTION ISOLATION LEVEL for the session. Per ogni istruzione Transact-SQLTransact-SQL successiva, tutti i blocchi condivisi verranno mantenuti attivi da SQL ServerSQL Server fino alla fine della transazione.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  

Vedere ancheSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
DBCC USEROPTIONS (Transact-SQL) DBCC USEROPTIONS (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
Istruzioni SET (Transact-SQL) SET Statements (Transact-SQL)
Hint di tabella (Transact-SQL)Table Hints (Transact-SQL)