Как изменить параметры сортировки базы данных SQL Server?

16

Я пытаюсь стандартизировать все базы данных с помощью одного сопоставления - Latin1_General_CI_AS (стандартное сопоставление). У меня есть несколько баз данных, которые находятся в SQL_Latin1_General_CP1_CI_AS.

Я знаю, что могу использовать ALTER DATABASE для изменения параметров сортировки базы данных, но это влияет только на новые объекты. Насколько я понимаю, единственный способ изменить существующие столбцы - это сделать ALTER COLUMN для каждого столбца в каждой таблице - и мне нужно было бы удалить и заново создать все индексы, чтобы сделать это.

Я думаю, это будет выглядеть примерно так:

DROP INDEX indexname ON tablename

GO

ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL

GO

CREATE CLUSTERED INDEX indexname ON tablename (columname ASC)

и повторите для каждого столбца varchar, char, text, nvarchar, nchar и ntext во всей базе данных. Это был бы огромный сценарий SQL.

Есть ли более простой способ сделать это, или кто-нибудь может предложить способ автоматизации создания сценария SQL для этого?

Ричард Гадсден
источник

Ответы:

9

MS KB 325335 имеет опции, как это сделать для всей базы данных и всех столбцов.

В принципе:

  1. Таблицы базы данных сценариев (с новым сопоставлением)
  2. Данные DTS / SSIS (просмотр сопоставления)
  3. Добавить ограничения
ГБН
источник
2

К сожалению, это не простая задача в SQL Server.

Вы можете использовать инструмент создания сценариев, такой как SQL Compare от Redgate, для существующих объектов базы данных (таблиц, хранимых процедур, представлений и т. Д.). Если у вас нет лицензии, вы можете использовать бесплатную пробную версию. После того, как вы создали новую базу данных с правильным сопоставлением и перестроили объекты из своего сценария, вы можете запустить SSIS для передачи данных из одной базы данных в другую. Если у вас много данных, используйте массовую вставку T-SQL.

Чтобы обеспечить правильную сортировку для будущих баз данных на этом сервере, вы можете изменить параметры сортировки по умолчанию на сервере. В следующей статье MSDN объясняется, что меняется с помощью предложений COLLATE в ALTER DATABASE и ALTER TABLE:

Настройка и изменение параметров сортировки базы данных (электронная документация по SQL Server 2008)

Вы можете изменить параметры сортировки любых новых объектов, созданных в пользовательской базе данных, используя предложение COLLATE оператора ALTER DATABASE . Этот оператор не изменяет параметры сортировки столбцов в любых существующих пользовательских таблицах. Их можно изменить с помощью предложения COLLATE в ALTER TABLE .

Когда вы изменяете параметры сортировки базы данных, вы меняете следующее:

  • Сортировка по умолчанию для базы данных. Это новое сопоставление по умолчанию применяется ко всем столбцам, пользовательским типам данных, переменным и параметрам, которые впоследствии создаются в базе данных. Он также используется при разрешении идентификаторов объектов, указанных в инструкциях SQL, в отношении объектов, определенных в базе данных.
  • Любые столбцы char, varchar, text, nchar, nvarchar или ntext в системных таблицах заменяются на новые параметры сортировки.
  • Все существующие параметры char, varchar, text, nchar, nvarchar или ntext и скалярные возвращаемые значения для хранимых процедур и пользовательских функций изменяются на новое сопоставление.
  • Системные типы данных char, varchar, text, nchar, nvarchar или ntext и все пользовательские типы данных, основанные на этих системных типах данных, заменяются на новое сопоставление по умолчанию.
splattne
источник
1

Обычно это не рекомендуется делать с живым сервером. В последний раз, когда я смотрел, это не было официально поддержано Microsoft. Чтобы сделать это на практике, вы должны создать новый экземпляр с правильным сопоставлением и перенести в него базу данных.

Восстановление БД на сервере с другим сопоставлением по умолчанию вызывает все виды удовольствия, так как tempdb будет иметь сопоставление нового сервера, поэтому это также не рекомендуется.

ConcernedOfTunbridgeWells
источник
1

Попробуйте эту утилиту , которая с учетом исходной базы данных сгенерирует все сценарии, необходимые для применения к целевой базе данных, чтобы сопоставление было безопасно изменено.

Манея Флорин
источник
1

Вы можете использовать представления Infomation_Schema для создания сценария достаточно легко, но я не уверен, что это лучший способ решить вашу проблему. Пересоздание всех индексов на большой базе данных может занять огромное количество времени / пространства журнала и т. Д. Я бы пошел с миграцией (а не восстановлением) на новый экземпляр.

Дэйв Джексон
источник