2011-11-02 18 views
11

Si justo después de BEGIN tengo SET TRANSACTION ISOLATION LEVEL ... declaración, ¿el nivel de transacción entre en vigor para todo el alcance del procedimiento almacenado independientemente si uso BEGIN TRANSACTION o no? A saber, si tengo declaraciones simples SELECT, que son atómicas/transacciones por definición, ¿el nivel de transacción predeterminado para ellas se establecerá en el dado?Servidor SQL: ¿cómo establecer el nivel de aislamiento predeterminado para todo el procedimiento almacenado?

BEGIN 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED 
-- will a transaction level for a atomic transaction created by SQL Server for this statement be READ COMMITTED 
SELECT * FROM T 
END 

Respuesta

11

En primer lugar, el nivel de aislamiento predeterminado en SQL Server es de lectura confirmada, por lo que la declaración en realidad no hace nada menos que haya cambiado el nivel de aislamiento predeterminado.

Pero, en general, sí, SET aislamiento de transacción nivel cambiará el nivel de aislamiento de todo el procedimiento (la duración de la conexión, de hecho)

Tenga en cuenta que todas las sentencias SQL son transacciones implícitas lo que significa que si, por ejemplo, una actualización falla el 99%, se revertirá automáticamente; no es necesario BEGIN TRAN/COMMIT.

Para responder a su pregunta, sí, sus instrucciones SELECT heredarán el nivel de aislamiento que establezca (o el predeterminado si no establece uno) a menos que anule el comportamiento con una sugerencia de consulta como WITH NOLOCK que hará que la consulta individual se comporte como si lo hiciera SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

+3

[No lo cambia mientras dura la conexión, como se muestra aquí] (http://stackoverflow.com/questions/7507714/sql-server-2005-transaction-level-and-stored -procedures/7507829 # 7507829) –

+0

@magicmike: gracias! Lo acepto como la respuesta, pero sería aún mejor si pudieras indicarme una documentación de MS. – Schultz9999

+1

si ayuda: 'SET TRANSACTION ISOLATION LEVEL' - http://msdn.microsoft.com/en-us/library/ms173763.aspx Transacciones implícitas: - http://msdn.microsoft.com/en-us/library /ms188317.aspx –

Cuestiones relacionadas