Измените тип данных с varchar на nvarchar для таблицы с большим объемом данных - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужны предложения о том, как лучше всего изменить тип данных столбца с varchar на nvarchar для таблицы с 500 миллионами записей.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

для таблицы с 500 миллионами записей.

Хотя ответ Ларну очень правильный, из-за размера таблицы я бы хотел указать на эту тему:

Измените тип данных varchar на nvarchar в существующей базе данных SQL Server 2005.Любые проблемы?

и URL: http://rusanu.com/2011/10/20/sql-server-table-columns-under-the-hood/

Изменение добавит новый столбец NVARCHAR, он будет обновлять каждую строку, копируя dta из старого VARCHAR вновый столбец NVARCHAR, и тогда он пометит старый столбец VARCHAR как удаленный.Если таблица большая, то создаст большой журнал , так что будьте к этому готовы.

К сожалению, VARCHAR () -> NVARCHAR () - это не только изменение метаданных,поэтому не похоже на INT-> BIGINT

Поэтому предлагается запустить изменение в окне обслуживания с дальнейшим удалением столбца, помеченного как «удаленный»:

DBCC CLEANTABLE 
-- or
ALTER TABLE ... REBUILD
0 голосов
/ 14 марта 2019

Итак, все, что я сделал, это: 1. Создайте новую таблицу с помощью nvarchar для необходимого столбца 2. Скопируйте данные из существующей таблицы в новую таблицу с помощью ssis.3. Создайте ограничения и индексы для новой таблицы.Все эти шаги можно выполнить, когда приложение все еще работает и работает. 4. Переименуйте существующую таблицу в _Old и переименуйте новую таблицу в имя существующей таблицы. Вышеуказанный шаг едва ли занимает секунду и является единственным шагом, когда приложение не работает.

Таким образом, я смог сократить время простоя приложения и успешно изменил тип данных столбца.

0 голосов
/ 22 февраля 2019

Вам просто нужно выполнить оператор ALTER TABLE

ALTER TABLE YourTable ALTER COLUMN YourColumn nvarchar({required length});

Вам нужно будет заменить раздел в фигурных скобках ({}) и заменить его именами объектов.

...