transaction transacciones read niveles ejemplos committed comandos anidadas aislamiento sql-server transactions

sql-server - read - transacciones en sql server pdf



¿Cuál es el alcance del aislamiento en las transacciones anidadas en SQL Server? (2)

Considere el siguiente SQL:

BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED INSERT Bands ( Name ) SELECT ''Depeche Mode'' UNION SELECT ''Arcade Fire'' -- I''ve indented the inner transaction to make it clearer. BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM Bands COMMIT -- What is the isolation level right here? UPDATE Bands SET Name = ''Modest Mouse'' WHERE Name = ''Oddest House'' COMMIT

En resumen, iniciamos una transacción y establecemos su nivel de aislamiento en READ COMMITTED . Luego hacemos SQL aleatorio y comenzamos otra transacción anidada. En esta transacción, cambiamos el nivel de aislamiento para READ UNCOMMITTED . Luego cometemos esa transacción y volvemos a la otra.

Ahora, supongo que después de la confirmación interna, el nivel de aislamiento vuelve a READ COMMITTED . ¿Es esto correcto?


No creo que eso sea correcto

Consulte los comentarios aquí: Establecer transacción

Solo se puede establecer una de las opciones de nivel de aislamiento a la vez, y permanece establecida para esa conexión hasta que se modifique explícitamente.


Usted [Bob Probst] está en lo cierto. Curiosamente, de acuerdo con la documentación que vinculó:

Si emite SET TRANSACTION ISOLATION LEVEL en un procedimiento almacenado o disparador, cuando el objeto devuelve el control, el nivel de aislamiento se restablece al nivel vigente cuando se invoca el objeto. Por ejemplo, si configura REPEATABLE READ en un lote y el lote llama a un procedimiento almacenado que establece el nivel de aislamiento en SERIALIZABLE, la configuración del nivel de aislamiento vuelve a REPEATABLE READ cuando el procedimiento almacenado devuelve el control al lote.

Entonces, el resultado final aquí es que SET TRANSACTION ISOLATION LEVEL tiene afinidad de procedimiento , no afinidad de transacción (como yo había pensado).

¡Increíble!