غير قادر على تحديث sys.columns - أي نهج آخر؟
-
26-09-2019 - |
سؤال
لقد اكتشفت للتو أنه منذ أن قمت بإنشاء ديسيبل على خادم مختلف كان له ترتيب مختلف ، ثم هاجر إلى خادم جديد مع ترتيب جديد ، الآن ما زلت أواصل المتاعب ، وقررت تغيير جميع قيم الترتيب القديم .
لذلك حاولت تنفيذ هذا الاستعلام:
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
لتغيير الترتيب لكل عمود.
الطريقة الوحيدة لتغيير ترتيب قاعدة البيانات هي إسقاط قاعدة البيانات وإعادة إنشاءها.