سؤال

لقد اكتشفت للتو أنه منذ أن قمت بإنشاء ديسيبل على خادم مختلف كان له ترتيب مختلف ، ثم هاجر إلى خادم جديد مع ترتيب جديد ، الآن ما زلت أواصل المتاعب ، وقررت تغيير جميع قيم الترتيب القديم .

لذلك حاولت تنفيذ هذا الاستعلام:

sp_configure "Allow Updates", 1
GO
RECONFIGURE WITH OVERRIDE
GO

UPDATE sys.columns SET collation_name = 
    'SQL_Latin1_General_CP1_CI_AS' WHERE collation_name = 'Hebrew_CI_AS'
GO

sp_configure "Allow Updates", 0
GO
RECONFIGURE
GO

ولكن هنا هو ناتج الاستعلام:

Configuration option 'allow updates' changed from 0 to 1. 
    Run the RECONFIGURE statement to install.

Msg 259, Level 16, State 1, Line 2
Ad hoc updates to system catalogs are not allowed.

Configuration option 'allow updates' changed from 1 to 0. 
    Run the RECONFIGURE statement to install.

تحديث
وفقًا للإجابات ، فإنني أبحث فقط عن طريقة آلية لأداء الإجراء.

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

المحلول 3

هذا الاستعلام يولد نصًا سيبادل الجميع Hebrew_CI_AS تجمع الأعمدة ل Latin1_General_CI_AS التجميع:

DECLARE @Script varchar(MAX)
SET @Script = CAST((
SELECT 'ALTER TABLE [' + Tables.Name + '] ALTER COLUMN [' + 
  [Columns].Name + '] ' + Types.Name + '(' + 
  CAST([Columns].max_length AS varchar) + ') COLLATE Latin1_General_CI_AS ' + 
  CASE WHEN [Columns].is_nullable = 0 THEN 'NOT ' ELSE '' END + 'NULL '
FROM sys.tables Tables INNER JOIN sys.all_columns [Columns]
  ON [Tables].[object_id] = [Columns].[object_id]
  INNER JOIN sys.types Types ON [Columns].system_type_id = Types.system_type_id
WHERE [Columns].collation_name = 'Hebrew_CI_AS'
FOR XML PATH('')
) AS varchar(MAX))

PRINT @Script
EXEC(@Script)

ملاحظة: بالنسبة للأعمدة التي يتم فهرستها/تقييدها ، ستحتاج إلى التحرير يدويًا ، ولكن هذا شيء أيضًا منذ تنفيذ الاستعلام أعلاه ، يحتوي ناتج الخطأ (للقيود وما إلى ذلك) على اسم الجدول والعمود ، يجب أن تعترف بأنه لا يزال أفضل من افعل كل شيء يدويًا.

نصائح أخرى

تحتاج إلى إصدار أوامر تغيير الجدول من أجل تغيير مجموعات الأعمدة المحددة.

على سبيل المثال

ALTER TABLE YourTable 
ALTER COLUMN ColA VARCHAR(10) COLLATE Latin1_General_CI_AS NOT NULL

الدفع مرجع MSDN هذا

يمكنك استخدام alter table لتغيير الترتيب لكل عمود.

الطريقة الوحيدة لتغيير ترتيب قاعدة البيانات هي إسقاط قاعدة البيانات وإعادة إنشاءها.

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