هل سيتداخل التحديد بواسطة DML
-
28-09-2019 - |
سؤال
عند استخدام Clean Read (قراءة ملتزمة) ... هل سيتم تدخل استعلام محدد عن طريق استعلام DML (إدراج ، تحديث ، حذف)؟ إذا كانت الإجابة بنعم ، هل يمكنك تقديم بعض الحالات. أنا أستخدم SQL Server 2005.
ما هو احتمال أن يكون الاستعلام أدناه هو العائد على بيانات غير صحيحة. لا يستخدم الاستعلام أي ارتباطات ، بل إنه يجلب بيانات من جدول واحد يعتمد على بعض Creteria.
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')
المحلول
قراءة مستوى العزل الملتزم يستخدم الأقفال المشتركة على مستوى الصف لتجنب قراءة البيانات القذرة. ومع ذلك ، نظرًا لأن القفل موجود في مستوى الصف ، فقد تتغير صفوف أخرى قبل اكتمال المعاملة ، مما يؤدي إلى قراءة غير قابلة للتكرار أو بيانات الوهمية.
انظر وثائق Microsoft على تعيين مستوى عزل المعاملة للحصول على تفاصيل إضافية و منشور المدونة هذا للحصول على مثال جيد.
لا تنتمي إلى StackOverflow