/ / SQL Server: como definir o nível de isolamento padrão para todo o procedimento armazenado? - sql, sql-server, tsql

SQL Server: como definir o nível de isolamento padrão para todo o procedimento armazenado? - sql, sql-server, tsql

Se logo após BEGIN eu tenho SET TRANSACTION ISOLATION LEVEL ... instrução, o nível de transação especificado entrará em vigor para todo o escopo do procedimento armazenado, independentemente de eu usar BEGIN TRANSACTION ou não? Ou seja, se eu tiver simples SELECT instruções, que são atômicas / transacionadas por definição, o nível de transação padrão para elas será definido para a determinada?

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

Respostas:

11 para resposta № 1

Primeiro, o nível de isolamento padrão no SQL Server é Leitura confirmada, para que a instrução realmente não faça nada, a menos que você tenha alterado o nível de isolamento padrão.

Mas, em geral, sim, o SET Transaction Isolation Level alterará o nível de isolamento para todo o procedimento (a duração da conexão, de fato)

Lembre-se de que todas as instruções SQL são transações implícitas, o que significa que, por exemplo, se uma atualização falhar 99%, ela será revertida automaticamente; não BEGIN TRAN/COMMIT é necessário.

Para responder sua pergunta, sim, suas instruções SELECT herdarão o nível de isolamento que você definir (ou o padrão se você não definir um), a menos que você substitua o comportamento por uma dica de consulta como WITH NOLOCK o que fará com que a consulta individual se comporte como se você fizesse SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED