الأعراض
عند تشغيل تحديث على جدول يحتوي على فهرس متفاوت المسافات أو فريد ويحدث التحديث على عمود فريد غير أساسي، يكون سجل تعقب التغييرات غير متوافق مع عبارة التحديث.
على سبيل المثال، افترض أن عمودا يسمى "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 | NULL | NULL | 5639485628 |
| 1116 | 20 | D | NULL | NULL | 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 | D | NULL | NULL | 5639485628 |
| 1126 | 33 | I | NULL | NULL | 5639485628 |
السبب
تحدث هذه المشكلة بسبب الترتيب غير الصحيح بين أزواج الحذف/الإدراج في الجدول الجانبي لتعقب التغيير.
الدقة
يتم تضمين إصلاح هذه المشكلة في التحديثات التالية SQL Server:
التحديث التراكمي 8 SQL Server 2017
التحديث التراكمي 9 لحزمة خدمة SQL Server 2016 1
التحديث التراكمي 12 ل SQL Server 2014 SP2
حول SQL Server الإصدارات
يحتوي كل إصدار جديد SQL Server على جميع الإصلاحات العاجلة وإصلاحات الأمان التي كانت موجودة في الإصدار السابق. نوصي بتثبيت أحدث إصدار SQL Server:
آخر تحديث تراكمي SQL Server 2017
آخر تحديث تراكمي SQL Server 2014
الحالة
لقد أكدت Microsoft على أن هذه مشكلة في منتجات Microsoft المُدرجة في القسم "ينطبق على".
معلومات إضافية
بالنسبة للجدول الممكن لتعقب التغييرات، عند حدوث تحديث على عمود غير أساسي تم تعريفه ليكون فريدا، يتم إدراج إدخالين في الجدول الجانبي لتعقب التغييرات: إدخال واحد لكل إجراء من إجراءات التقسيم، إدراج وحذف.
عند استدعاء الدالة CHANGETABLE لتعداد التغييرات، يتم فرز هذه الإدخالات حسب قيم المفتاح الأساسي، ثم يتم تجميع العمليات. إذا أدرج التحديث قيمة أقل، يتم تشغيل عملية "I" على الجدول الجانبي أولا، متبوعة بعملية "D". يؤدي هذا إلى إرجاع عملية غير صحيحة لهذا الصف. وذلك لأن "I" يتبع "D" يتم تجميعه على أنه "D".
نظرا لأنه يتم الاحتفاظ بقيم المفتاح الأساسي فقط في الجداول الجانبية، فليس من الضروري وجود إدخالين منفصلين. هذا صحيح طالما لم يتم تحديث عمود المفتاح الأساسي.
تم إصلاح هذه المشكلة للأعمدة الفريدة غير الأساسية. في هذه الحالة، عند حدوث التحديث، يتم إدراج صف واحد فقط عن طريق وجود "U" كلعملية تحديث بدلا من إدخالين يحتويان على "D" و"I".
المراجع
تعرف على المصطلحات التي تستخدمها Microsoft لوصف تحديثات البرامج.