Невозможно обновить 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, чтобы изменить сопоставления определенных столбцов.
например
ALTER TABLE YourTable
ALTER COLUMN ColA VARCHAR(10) COLLATE Latin1_General_CI_AS NOT NULL
Проверить Это ссылка на MSDN
Вы можете использовать alter table
Чтобы изменить сопоставление для каждого столбца.
Единственный способ изменить сопоставление базы данных - это упасть и воссоздать базу данных.