سؤال

أحصل على خطأ في تشغيل أمر المعاملات التالي:

CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)

الخطأ هو:

MSG 1505 ، المستوى 16 ، الحالة 1 ، السطر 1 تم إنهاء عبارة CREATE EXTERICAL ، لأنه تم العثور على مفتاح مكرر لاسم الكائن "dbo.dimmeasuretopic" واسم الفهرس "IX_TOPICSHORTNAME". قيمة المفتاح المكررة هي ().

عندما أركض SELECT * FROM sys.indexes WHERE name = 'IX_TopicShortName' أو SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimMeasureTopic]') لا يتم عرض فهرس IX_TopicShortName. لذلك لا يبدو أن هناك نسخة مكررة.

لدي نفس المخطط في قاعدة بيانات أخرى ويمكنني إنشاء الفهرس دون مشاكل هناك. أي أفكار لماذا لن تخلق هنا؟

هل كانت مفيدة؟

المحلول

لا يوجد الفهرس بالفعل ، ولكن هناك قيم مكررة من TopicShortName الحقل في الجدول نفسه. وفقًا لرسالة الخطأ ، فإن القيمة المكررة هي سلسلة فارغة (قد تكون مجرد جانب للنشر على ما أعتقد). مثل هذه التكرارات تمنع إنشاء أ UNIQUE فهرس.

يمكنك تشغيل استعلام لتأكيد أن لديك نسخة مكررة:

SELECT
    TopicShortName,
    COUNT(*)
FROM
    DimMeasureTopic
GROUP BY
    TopicShortName
HAVING
    COUNT(*) > 1

من المفترض أن تكون البيانات مختلفة في قاعدة البيانات الأخرى ، ولا توجد التكرارات.

نصائح أخرى

المكررة في بياناتك ، حاول تشغيل هذا الاستعلام للعثور عليه.

SELECT TopicShortName, COUNT(*)
FROM DimMeasureTopic
GROUP BY TopicShortName
HAVING COUNT(*) > 1

ذلك لأن لديك سجلات في الجدول بالفعل غير فريدة من نوعها (بأصواته ، سجلان ذوو قيمة فارغة في حقل TopicShortName).

لذلك ، يتعلق الأمر بالبيانات ، وليس الفهرس نفسه.

إذا كنت تستخدم عمليات الترحيل المستندة إلى الرمز ، وقمت بإعادة تسمية خاصية لكيان ما وكنت لديك فهرس فريد للخاصية ، فسيقوم إطار العمل بإنشاء عمود جديد ومحاولة إضافة فهرس فريد للعمود الجديد ولكن العمود الجديد لديه كل القيم الفارغة ، وبالتالي سوف تفشل. تحتاج إلى تعديل رمز الترحيل يدويًا لنسخ البيانات من العمود القديم قبل السطر لإنشاء الفهرس.

يجب أن يحدد قيمة المفتاح المكررة في رسالة الخطأ. "القيمة الرئيسية المكررة هي ('' '،' '،' ') تم إنهاء البيان. لديك قيم مكررة يجب معالجتها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top