Зміна collation бази даних SQL, таблиць та полів у таблицях - Saqwel
Стаття присвячена питанням, що обговорюється на багатьох форумах про те, як перенести бази даних SQL і при цьому поміняти collation. Проблема в тому, що необхідно змінювати collation бази, collation таблиць всередині бази та collation полів таблиць. До того ж не можна міняти collation у індексів та ще десь. Не знаю чому я не знайшов в інтернеті статей про подібний метод зміни collation з одночасним перенесенням бази. Але він начебто працює. В інтернеті я натикався лише на великі та незрозумілі скрипти, які мають допомогти у вирішенні цієї проблеми, але запускати їх здається не дуже зручним, тому що немає бажання розібратися у чужому скрипті.
Отже, почнемо. Відкрити SQL Server Enterprise Manager, вибрати базу даних, яку потрібно копіювати. Правий клік по базі, в меню вибрати All Tasks-Generate SQL Script. У вікні, перебуваючи на закладці «General», поставити галку навпроти «Script all objects».

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

На вкладці Options поставити всі галки, які є, File Format і Files to Generate залишаємо як є. Тільки у разі виникнення проблем при перенесенні бази даних можна згенерувати не один файл для всієї бази, як встановлено за замовчуванням, а по одному файлу на кожен об'єкт бази даних, вибравши Create one file per object.

Натиснути кнопку "OK", вказати, куди і з яким ім'ям зберегти файл.
Відкрити файл у блокноті. Якщо в скрипті вказано collation, з яким необхідно створювати базу та колонки таблиць, і цей collation не відповідає тому, що необхідно, то замінитивсі згадки про старе collation на нове значення collation. Якщо ж у скрипті немає згадок про collation, то база буде створена з 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", решту залишити як є.

Натискаємо кнопку "Next", у наступному вікні тиснемо "Next", потім "Finish".
У випадку, якщо процедура експорту/імпорту пройшла успішно, база повинна бути повністю скопійована з новим collation і готова до роботи.