Categories: Databases

Изменение collation базы данных SQL, таблиц и полей в таблицах

Статья посвящена обсуждаемому на многих форумах вопросу о том, как перенести базы данных SQL и при это поменять collation. Проблема в том, что необходимо менять collation базы, collation таблиц внутри базы и collation полей таблиц. К тому же нельзя менять collation у индексов и еще где-то. Не знаю почему я не нашел в интернете статей о подобном методе смены collation с одновременным переносом базы. Но он, вроде бы, работает. В интернете я натыкался лишь на большие и непонятные скрипты, которые должны помочь в решении этой проблемы, но запускать их кажется не очень удобным, так как нет желания разобраться в чужом скрипте.

Итак, приступим. Открыть SQL Server Enterprise Manager, выбрать базу данных, которую надо копировать. Правый клик по базе, в появившемся меню выбрать All Tasks->Generate SQL Script. В появившемся окне, находясь на закладке «General», поставить галку напротив «Script all objects».

Рис. 1. Создание скрипта

На вкладке «Formatting» поставить галки «Generate the CREATE <object> command for each object» и «Generate scripts for all dependent objects», остальные убрать.

Рис. 2. Создание скрипта

На вкладке «Options» поставить все галки, которые есть, «File Format» и «Files to Generate» оставляем как есть. Только в случае возникновения проблем при переносе базы данных можно сгенерировать не один файл для всей базы, как установлено по умолчанию, а по одному файлу на каждый объект базы данных, выбрав «Create one file per object».

Рис. 3. Создание скрипта

Нажать кнопку «OK», указать, куда и с каким именем сохранить файл.

Открыть файл в блокноте. Если в скрипте указан collation, с которым необходимо создавать базу и колонки таблиц, и этот collation не соответствует тому, что необходимо, то заменить все упоминания о старом collation на новое значение collation. Если же в скрипте нет упоминаний о collation, то база будет создана с collation по умолчанию (таким как у сервера).

Рис. 4. Изменение collation в созданном скрипте

Открыть Query Analyzer, подключиться к серверу, на который необходимо копировать базу данных. Открыть скрипт. Проверить скрипт на правильность путей, где будут созданы файлы базы данных (*.mdf и *.ldf). Выполнить скрипт. В результате должна появиться база данных, в точности повторяющая структуру старой, только с новым collation и пустыми таблицами.

Замечание. Необходимо убедиться, что на сервере нет базы с таким же именем, на жестком диске достаточно места для новой базы данных (в скрипте, в первых строках указано, какой размер будет у базы данных).

После этого достаточно провести операцию экспорта/импорта данных в эту пустую базу данных. Для этого в окне SQL Server Enterprise Manager выбрать старую базу данных, на старом сервере, правый клик по ней и выбрать All Tasks->Export Data…. Выбрать источник, откуда происходит экспорт, затем сервер и базу, куда будет произведен экспорт данных. В окне «Specify Table Copy or Query» выбрать «Copy objects and data between SQL Server databases». В следующем окне «Select Objects to Copy» убрать галку «Create destination objects», остальное оставить, как есть.

Рис. 5. Окно выбора объектов, которые необходимо экспортировать

Нажимаем кнопку «Next», в следующем окне жмем «Next», затем «Finish».

В случае, если процедура экспорта/импорта прошла успешно, то база должна быть полностью скопирована с новым collation и готова к работе.

Saqwel

Share
Published by
Saqwel

Recent Posts

Azure App Configuration and access to Key Vault references

We decided to use an Azure App Configuration to store configs of backend. App Configuration…

2023-08-24

Azure cli az acr login hangs

I have encountered an issue with az acr login --name <acr_name> command. It hanged and…

2023-08-23

Error: Unable to read Docker image into resource: unable to find or pull image nginx:latest

I have tried to learn terraform from scratch and found pretty simple tutorial for beginners.…

2022-09-09

Скрыть поле модели от Swagger (Hide field of model from Swagger)

При внедрении Swagger в проекте .Net Core Web API потребовалось скрыть одно поле из примера,…

2020-04-24

Прогноз цен на акции

Около года назад я решил попробовать заработать на фондовой бирже, покупая и продавая акции. Изучая…

2019-07-20

Installation failed with error code: (0x00000490), “Element not found. “

Во время установки .NET Framework столкнулся с ошибкой Installation failed with error code: (0x00000490), "Element…

2018-12-20