ينطبق على
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

الأعراض

عند تشغيل تحديث على جدول يحتوي على فهرس متفاوت المسافات أو فريد ويحدث التحديث على عمود فريد غير أساسي، يكون سجل تعقب التغييرات غير متوافق مع عبارة التحديث.

على سبيل المثال، افترض أن العمود المسمى "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

تحديث تراكمي 12 ل SQL Server 2014 SP2

حول إصدارات SQL Server

تحتوي كل بنية جديدة SQL Server على جميع الإصلاحات العاجلة وإصلاحات الأمان التي كانت في الإصدار السابق. نوصي بتثبيت أحدث إصدار SQL Server:

التحديث التراكمي الأخير SQL Server 2017

أحدث إصدار SQL Server 2016

آخر تحديث تراكمي SQL Server 2014

الحالة

أقرت Microsoft أن هذه المشكلة تحدث في منتجات Microsoft المسردة في المقطع "تنطبق على".

مزيد من المعلومات

بالنسبة لجدول تم تمكين تعقب التغييرات، عند حدوث تحديث على عمود غير أساسي تم تعريفه ليكون فريدا، يتم إدراج إدخالين في الجدول الجانبي لتعقب التغييرات: إدخال واحد لكل إجراء من إجراءات التقسيم، إدراج وحذف.

عند استدعاء الدالة CHANGETABLE لتعداد التغييرات، يتم فرز هذه الإدخالات حسب قيم المفتاح الأساسي، ثم يتم تجميع العمليات. إذا أدرج التحديث قيمة أقل، يتم تشغيل عملية "I" على الجدول الجانبي أولا، متبوعا بعملية "D". يؤدي ذلك إلى إرجاع عملية غير صحيحة لهذا الصف. وذلك لأن "I" التي تتبع "D" مجمعة على أنها "D".

نظرا إلى أنه يتم الاحتفاظ بقيم المفتاح الأساسي فقط في الجداول الجانبية، فليس من الضروري وجود إدخالين منفصلين. هذا صحيح طالما لم يتم تحديث عمود المفتاح الأساسي.

تم تصحيح هذه المشكلة للأعمدة الفريدة غير الأساسية. في هذه الحالة، عند حدوث التحديث، يتم إدراج صف واحد فقط عن طريق وجود "U" كعمليات تحديث بدلا من إدخالين يحتويان على "D" و"I".

المراجع

تعرف على المصطلحات التي تستخدمها Microsoft لوصف تحديثات البرامج.

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.