الأعراض
افترض أن محاولة حذف البيانات من جدول، وتتم الإشارة إلى البيانات الموجودة في جداول أخرى في Microsoft SQL Server 2016 و 2017. أناو استكشاف الاستعلام خطة تنفيذ، يمكنك أن ترى أنها تستخدم عامل "مرجع مفتاح خارجي تحقق" .في هذه الحالة، قد تظهر رسالة خطأ التالية حتى ولو الصف الحالي حذف غير المشار إليها في الجداول الأخرى:
Msg 547، مستوى 16 حالة 0، البند رقم السطر
عبارة DELETE يتعارض مع القيد المرجع
الحالة
أقرت Microsoft أن هذه المشكلة تحدث في منتجات Microsoft المسردة في المقطع "تنطبق على".
الحل
تم إصلاح هذه المشكلة في التحديث التراكمي ل SQL Server التالية:
ملاحظة: تم إصلاح هذه المشكلة في التحديث التراكمي 6 ل SP2 2016 ملقم SQL.
حول التحديثات التراكمية ل SQL Server:
يحتوي التحديث التراكمي كل جديدة ل SQL Server على كافة الإصلاحات العاجلة وكافة إصلاحات الأمان التي تم تضمينها مع التحديث التراكمي السابق. تحقق من أحدث التحديثات التراكمية ل SQL Server:
الحل البديل
لحل هذه المشكلة، استخدم إحدى الوسائل التالية:
-
استخدام مستوى توافق أدناه 130 لتشغيل هذا الاستعلام.
-
تغيير بنية الفهرس في الجدول المرجعي.
مزيد من المعلومات
بدء تشغيل قاعدة البيانات خاصة بتكوين مستوى التوافق 130 في عام 2016 خادم SQL، خطة تنفيذ استعلام استخدام "مرجع مفتاح خارجي" التحقق من عامل التشغيل للتحقق من حالة صف في جدول المشار إليها بواسطة أي صفوف أخرى الجداول من خلال قيود التكامل المرجعي. يمكن استخدام هذا العامل إذا تتم الإشارة إلى جدول بعدد كبير من الجداول الخارجية. في هذا العامل اختيار ملقم SQL فهرس في كل جدول المرجعي للقيام بمثل هذا الاختيار. إذا يحتوي جدول المرجعي على فهرس مع عدة أعمدة المفاتيح، مثل بعض الأعمدة في البداية ليست جزءا من المفتاح الخارجي، ولكن بعض الدول الأخرى أعمدة جزء من المفتاح الخارجي. قد يؤدي هذا الاختيار غير الصحيح الذي يتم تنفيذه قبل SQL Server.
على سبيل المثال، خذ بعين الاعتبار المخطط التالي:
إنشاء جدول الماوريين (قيد المفتاح الأساسي int المفتاح الأساسي cpk متفاوت المسافات)
إنشاء جدول تفك (int، int المفتاح الخارجي الماوريين مراجع المفتاح الخارجي cfk قيد الفهرس الأول ألف clustered(a,fk))
قد ينتج هذا المخطط في هذه المسألة، ولكن إذا قمت بتغيير ترتيب الأعمدة في الفهرس الأول ألف إلى (المفتاح الخارجي،)، لن.
المراجع
التعرف المصطلحاتالتي تستخدم لوصف تحديثات برامج Microsoft.