it-swarm.dev

لا يمكن حل تضارب الترتيب

لقد قمت بنقل إحدى قواعد البيانات الخاصة بنا (DB1) من SQL Server 2008 إلى 2012 ، وعندما أقوم بتشغيل الإجراءات المخزنة ، أتلقى الخطأ التالي

لا يمكن حل تعارض الترتيب بين "SQL_Latin1_General_CP1_CI_AS" و "Latin1_General_CI_AS" في نفس العملية

لقد غيرت الترتيب على قاعدة البيانات باستخدام

ALTER DATABASE [optimiser] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [optimiser] COLLATE SQL_Latin1_General_CP1_CI_AS
ALTER DATABASE [optimiser] SET MULTI_USER

لكن ما زلت أحصل على الخطأ عند تشغيل الإجراءات المخزنة أعتقد أن SP يستخدم صلة إلى قاعدة بيانات أخرى (GE's ihistorian) ولديه عدم تطابق الترتيب. IS هناك على أي حال لحل هذا.

على الخادم القديم تم تعيين DB1 كـ Latin1_General_CI_AS وهذا يعمل بشكل جيد. يحتوي الموقع الجديد لقاعدة البيانات افتراضيًا SQL_Latin1_General_CP1_CI_AS. هل يستحق تغيير ترتيب النسخ DB1 على الخادم الجديد إلى Latin1_General_CI_AS؟

41
Silentbob

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

عندما تقوم بتغيير ترتيب نسخ قاعدة البيانات ، سيكون ذلك افتراضيًا جديدًا لجميع الجداول والأعمدة الجديدة ، لكنه لا يغير ترتيب ترتيب الكائنات الموجودة داخل قاعدة البيانات. يجب عليك الذهاب وتغيير ترتيب كل جدول وعمود يدويًا.

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

http://www.codeproject.com/Articles/302405/The-Easy-way-of-changing-Collation-of-all-Database

تحديث ترتيب جميع الحقول في قاعدة البيانات على الطاير

http://www.sqlservercentral.com/Forums/Topic820675-146-1.aspx

إذا كنت بحاجة إلى ترتيب مختلف على كائنين أو لا يمكنك تغيير الترتيب - لا يزال بإمكانك JOIN بينهما استخدام الأمر COLLATE ، واختيار الترتيب الذي تريد الانضمام إليه.

SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE Latin1_General_CI_AS 

أو باستخدام ترتيب النسخ الافتراضي لقاعدة البيانات:

SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE DATABASE_DEFAULT
85
Nenad Zivkovic