Мне нужно изменить тип данных в таблице SQL Server 2008 с varchar (max) на nvarchar (max). В этой таблице содержатся данные. Есть ли способ изменить тип данных без потери данных?
Изменение столбца данных из varchar (max) в nvarchar (max) в SQL Server 2008
Ответ 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)
, так как процессу пришлось бы преобразовывать расширенные символы, если таковые присутствовали.