2010-11-24 11 views
1

Lors de l'utilisation de clean read (Read committed) ... Une requête select sera-t-elle interférée par une autre requête DML (Insert, Update, Delete)? Si oui, pouvez-vous fournir quelques cas. J'utilise SQL Server 2005.La sélection sera-t-elle perturbée par DML?

Quelle est la possibilité la requête ci-dessous donnera des données incorrectes. La requête n'utilise aucune jointure, elle récupère simplement les données d'une seule table basée sur des crétons.

Select PracticeCode, AccountNo, ProcCd, Modifier , ChargeDos, Paid as Amt, CreatedDate, 
     case When Paid > 0 then 'P' 
       When Paid = 0 and WrittenOff = DueAmt then 'A' 
       Else 'O' 
     End as Status 
    From Trn_Postings 
    Where CreatedDate between @StartDateTime and @EndDateTime 
        and ManualOverride not in ('F','S','X','G','O') 

Répondre

1

Le niveau d'isolement validé en lecture utilise des verrous partagés au niveau de la ligne pour éviter la lecture de données incorrectes. Cependant, étant donné que le verrouillage est au niveau de la ligne, les autres lignes peuvent changer avant la fin de la transaction, ce qui entraîne des lectures non répétables ou des données fantômes. Voir la documentation de Microsoft sur SET TRANSACTION ISOLATION LEVEL pour plus de détails et this blog post pour un bon exemple.