الأعراض
عند تشغيل تحديث على جدول يحتوي على فهرس متفاوت المسافات أو فريد ويحدث التحديث على عمود فريد غير أساسي، يكون سجل تعقب التغييرات غير متوافق مع عبارة التحديث.
على سبيل المثال، افترض أن العمود المسمى "column1" مضمن في الفهرس المجمع أو الفريد. عند تغيير قيمة العمود من قيمة أكبر إلى أصغر (مثل تغيير القيمة من 20 إلى 16)، يتلقى الجدول الجانبي لتعقب التغييرات عملية الإدراج قبل عملية الحذف. على سبيل المثال، يتم تلقي عملية إدراج سجل صف في سجل المعاملات قبل عملية حذف الصف، أو يتم إدراج "I" قبل "D".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
I |
فارغه |
فارغه |
5639485628 |
1116 |
20 |
د |
فارغه |
فارغه |
5639485628 |
عند تغيير قيمة العمود من قيمة أصغر إلى أكبر (مثل تغيير القيمة من 16 إلى 20)، يتم إدراج "D" قبل "I".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1126 |
32 |
د |
فارغه |
فارغه |
5639485628 |
1126 |
33 |
I |
فارغه |
فارغه |
5639485628 |
السبب
تحدث هذه المشكلة بسبب الترتيب غير الصحيح بين أزواج الحذف/الإدراج في الجدول الجانبي لتعقب التغييرات.
الحل
تم تضمين تصحيح هذه المشكلة في التحديثات التالية SQL Server:
التحديث التراكمي 8 SQL Server 2017
التحديث التراكمي 9 لحزمة خدمة SQL Server 2016 1
حول إصدارات SQL Server
تحتوي كل بنية جديدة SQL Server على جميع الإصلاحات العاجلة وإصلاحات الأمان التي كانت في الإصدار السابق. نوصي بتثبيت أحدث إصدار SQL Server:
الحالة
أقرت Microsoft أن هذه المشكلة تحدث في منتجات Microsoft المسردة في المقطع "تنطبق على".
مزيد من المعلومات
بالنسبة لجدول تم تمكين تعقب التغييرات، عند حدوث تحديث على عمود غير أساسي تم تعريفه ليكون فريدا، يتم إدراج إدخالين في الجدول الجانبي لتعقب التغييرات: إدخال واحد لكل إجراء من إجراءات التقسيم، إدراج وحذف.
عند استدعاء الدالة CHANGETABLE لتعداد التغييرات، يتم فرز هذه الإدخالات حسب قيم المفتاح الأساسي، ثم يتم تجميع العمليات. إذا أدرج التحديث قيمة أقل، يتم تشغيل عملية "I" على الجدول الجانبي أولا، متبوعا بعملية "D". يؤدي ذلك إلى إرجاع عملية غير صحيحة لهذا الصف. وذلك لأن "I" التي تتبع "D" مجمعة على أنها "D".
نظرا إلى أنه يتم الاحتفاظ بقيم المفتاح الأساسي فقط في الجداول الجانبية، فليس من الضروري وجود إدخالين منفصلين. هذا صحيح طالما لم يتم تحديث عمود المفتاح الأساسي.
تم تصحيح هذه المشكلة للأعمدة الفريدة غير الأساسية. في هذه الحالة، عند حدوث التحديث، يتم إدراج صف واحد فقط عن طريق وجود "U" كعمليات تحديث بدلا من إدخالين يحتويان على "D" و"I".
المراجع
تعرف على المصطلحات التي تستخدمها Microsoft لوصف تحديثات البرامج.