De acordo com o artigo do MSDN de Kimberly L. Tripp, " SQL Server 2005 Row Versioning-Based Transaction Isolation " de Neal Graves
- "... Todas as versões anteriores de um determinado registro são encadeadas em uma lista vinculada; e no caso de transações baseadas em controle de versão de linha de execução longa, o link terá que ser percorrido em cada acesso para alcançar a versão transacionalmente consistente de a fila"
que está na seção "Entendendo o controle de versão de linha" comum para seguir as seções "Versão de linha em leitura confirmada usando controle de versão de linha" e "Versão de linha no isolamento de instantâneo".
Mais adiante, o exemplo de controle de versão de linha devido a modificações é fornecido no contexto de várias atualizações do mesmo registro por várias transações (T1, T2, T3) apenas em SNAPSHOT.
Caso apenas uma transação atualize um registro várias vezes (por várias declarações), vários armazenamentos de versão serão armazenados (vinculados) ou apenas aquele obtido no momento da "imagem" do SNAPSHOT?
Bem, a resposta a esta pergunta deve responder imediatamente às minhas outras perguntas relacionadas pendentes:
Apenas um.
A primeira atualização da linha gera uma versão de linha e bloqueia exclusivamente a linha. Atualizações posteriores na mesma linha dentro da mesma transação não geram novas versões de linha.
Uma lista encadeada de versões de linha pode surgir da seguinte forma:
A transação T1 em uma transação SNAPSHOT lê uma linha e vê o valor 'a'.
A transação T2 (sob qualquer nível de isolamento) atualiza o valor de 'a' para 'b' e confirma. Isso gera uma versão de linha para o valor 'a'.
A transação T3 (sob qualquer nível de isolamento) atualiza o valor de 'b' para 'c' e confirma. Isso gera uma versão de linha para o valor 'b'. Esta versão de linha está vinculada à versão de linha anterior para 'a'.
A transação T1 lê o valor da linha percorrendo o link do valor armazenado na página atual ('c'), para a versão da linha 'b' e, em seguida, de volta para a versão da linha 'a'.
As versões de linha são geradas por alterações de dados, independentemente de haver uma transação de leitura existente (em qualquer nível de isolamento). As versões podem nunca ser necessárias, mas elas ainda são geradas - a mesma lista encadeada de versões é criada mesmo sem a transação T1.