web-dev-qa-db-fra.com

Pourquoi choisir peut-il voir la ligne mise à jour avant de s'engager?

Si je courais cela sans une déclaration de validation ...

begin transaction

update dateranges set DateRangeTypeId = 1 where DateRangeId = 154

Dans un autre onglet de Studio de gestion, je peux sélectionner la plage avec ID 154 et indique l'ancienne valeur pour la colonne Type.

Pourquoi le bloc sélectionné n'est-il pas sur la ligne mise à jour?

6
Ian Warburton

En supposant que la deuxième fenêtre SSMS utilise la valeur par défaut READ_COMMITTED Niveau d'isolation, vous verrez la valeur précédente au lieu d'être bloquée par la transaction non engagée si la base de données ait le READ_COMMITTED_SNAPSHOT Réglage allumé.

SELECT name, snapshot_isolation_state_desc
FROM sys.databases
ORDER BY name;

Le READ_COMMITTED_SNAPSHOT Réglage de la base de données utilise la version de ligne au lieu de verrouiller la cohérence de lecture afin que les écrivains ne bloquent pas les lecteurs et visa-versa.

12
Dan Guzman