سؤال

هل من الممكن أن يكون لديك عمود Varchar كمفتاح أساسي مع قيم مثل "A" و "A" ، هو دائمًا هذا الخطأ "انتهاك لقيد المفتاح الأساسي" في MS SQL Server 2008. في Oracle لا يعطي أي خطأ. راجع للشغل أنا لا أقوم بتنفيذ بهذه الطريقة أحاول فقط ترحيل البيانات من Oracle إلى SQL Server.

يعتبر

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

المحلول

يمكنك استخدام أ text أو ntext العمود ، الذي يعتمد المرء على نوع البيانات التي تستوردها وطولها - سيحافظ هذا على المساحات. char سوف المساحات وسادة ، لذلك قد لا تكون مناسبة.

نصائح أخرى

يملي معيار SQL-92 أنه لأغراض مقارنة سلسلة الأحرف ، تكون السلاسل مبطنة لتكون نفس الطول قبل المقارنة: عادةً ما تكون حرف PAD مساحة.

لذلك "A" و "A" مقارنة على قدم المساواة وهذا ينتهك قيود PK.http://support.microsoft.com/kb/316626

لم أجد شيئًا للإشارة إلى أن هذا السلوك قد تغير منذ ذلك الحين.

قد تفلت من استخدام Varbinary بدلاً من Varchar ولكن هذا قد لا يفعل ما تريده أيضًا.

استخدم نوع بيانات لا تجرد مساحات زائدة.

قد تحاول التخزين باعتبارها varbinary ، ثم التحويل إلى varchar عند تحديد.

اعتقدت أن هذا قد يكون له علاقة بـ ANSI_Padding: لكن الاختبار الخاص بي هنا ، يشير إلى أنه بالنسبة إلى PKS (ربما فهارس فريدة من نوعها أيضًا ، لم تتم تجربتها) ، لا يزال هذا لا يساعد للأسف.

لذا:

SET ANSI_PADDING ON

يعمل لصالح الحقول غير PK - أي أنه يحافظ على المساحة الخلفية على الإدراج ، ولكن لسبب ما ليس على PKS ...

يرى :

http://support.microsoft.com/kb/154886/en-us/

يمكنك إضافة عمود آخر إلى قيد المفتاح الأساسي الذي يحمل طول البيانات في عمود Oracle. سيتيح لك ذلك استيراد البيانات وإعادة بناء بيانات Oracle عندما تحتاج إلى - مع طريقة عرض يستخدم طول بيانات Oracle مع الطول في جدول Microsoft لإضافة المساحات المفقودة للعرض في التقارير وما إلى ذلك.

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