Подтвердить что ты не робот

Изменение столбца данных из varchar (max) в nvarchar (max) в SQL Server 2008

Мне нужно изменить тип данных в таблице SQL Server 2008 с varchar (max) на nvarchar (max). В этой таблице содержатся данные. Есть ли способ изменить тип данных без потери данных?

4b9b3361

Ответ 1

Вы можете просто использовать стандартный синтаксис для изменения таблицы:

ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max)

Вы, вероятно, захотите перестроить все индексы, чтобы убедиться, что они работают так, как ожидалось.

Ответ 2

Еще одна возможность свести к минимуму сбой (так как я не верю, что ALTER COLUMN будет в сети):

ALTER TABLE dbo.table ADD new_column NVARCHAR(MAX); -- metadata operation

Теперь вы можете обновлять данные в волнах/партиях/транзакциях вместо того, чтобы применять изменения ко всей таблице за одну длинную транзакцию. Когда вы будете удовлетворены тем, что данные скопированы, вы можете удалить старый столбец, переименовать новый и повторно создать любые затронутые индексы (ваш столбец MAX не может быть ключом любого индекса, но вы можете иметь непреднамеренно включить его в определение INCLUDE - если это так, вы должны все равно задать вопрос).

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

Ответ 3

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

При этом изменение с varchar(max) до nvarchar(max) не должно терять данные.

Боковое замечание: у вас могут возникнуть проблемы, если вы изменили в другом направлении nvarchar(max) на varchar(max), так как процессу пришлось бы преобразовывать расширенные символы, если таковые присутствовали.