O artigo online do MSDN " Snapshot Isolation in SQL Server " afirma:
- "Um nível de isolamento tem escopo de toda a conexão e, uma vez definido para uma conexão com a instrução SET TRANSACTION ISOLATION LEVEL, ele permanece em vigor até que a conexão seja fechada ou outro nível de isolamento seja definido. Quando uma conexão é fechada e retornada ao pool , o nível de isolamento da última instrução SET TRANSACTION ISOLATION LEVEL é retido . Conexões subseqüentes que reutilizam uma conexão em pool usam o nível de isolamento que estava em vigor no momento em que a conexão é agrupada"
Não é um parágrafo autocontraditório ("até" vs. "retido")?
Então, se "o nível de isolamento da última instrução SET TRANSACTION ISOLATION LEVEL for mantido " após fechar a conexão e retorná-la a um pool, como isso deve ser entendido:
- que o nível de isolamento padrão terá valor arbitrário (diferentes conexões no pool terão diferentes níveis de isolamento e seu valor dependerá da reabertura da conexão)?
- ou todos os valores padrão em todas as conexões em seu pool serão alterados para o último? mas novamente bastante desconhecido de antemão?
Uma conexão do pool terá o nível de isolamento definido pelo último cliente a usar essa conexão. Sim, é realmente tão assustador.
O resumo disso é que, se você alterar o nível de isolamento de uma conexão, deverá defini-lo explicitamente
READ COMMITTED
antes de fechar. Melhor é declarar explicitamente seu nível de isolamento necessário no início de qualquer lote, para garantir que seu código não seja afetado por alguém sendo desleixado e retorná-lo ao padrão no final.Esse comportamento, embora desconcertante, é aparentemente intencional .
Não para mim, mas posso ver que existem outras maneiras de lê-lo. Se você deseja que a documentação seja atualizada para torná-la mais clara, o local adequado para solicitar isso é no Microsoft Connect . As pessoas aqui não mantêm a documentação da Microsoft.
Se você estiver reutilizando uma conexão em pool, sim, o nível de isolamento "pré-existente" é aquele que estava em vigor quando a conexão em pool foi fechada pela última vez. A melhor prática é definir explicitamente o nível de isolamento necessário ao conectar.
Não.
O SQL Server 2014 agora redefine o nível de isolamento das conexões em pool para a maioria das versões do protocolo TDS. As versões anteriores do SQL Server não redefiniam o nível de isolamento.