Вопрос

Я только что узнал, что, поскольку я создал свою БД на другом сервере, который имел другое сопоставление, затем иммигрировал на новый сервер с новым сопоставлением, теперь я продолжаю возникнуть проблемы, и я решил изменить все значения старого сопоставления Отказ

Поэтому я пытался выполнить этот запрос:

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 Чтобы изменить сопоставление для каждого столбца.

Единственный способ изменить сопоставление базы данных - это упасть и воссоздать базу данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top