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 № 1Primeiro, 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