Изменить тип столбца с ntext на varbinary (max)
-
22-07-2019 - |
Вопрос
У меня есть таблица с полем ntext
. MSDN говорит, что ntext
устарела, и они предложить другие типы данных:
Типы данных ntext, text и image будут удалены в следующей версии Microsoft SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые их используют в настоящее время. Используйте взамен nvarchar (max), varchar (max) и varbinary (max). Р>
В моем конкретном случае было решено перейти на varbinary (max)
. Я пытался изменить определение таблицы, но это не сработало.
ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);
Как можно изменить тип на varbinary (max)
? Я попытался изменить тип с ntext
- > nvarchar (max)
, а затем из nvarchar (max)
- > varbinary (max)
, но это невозможно (ошибка: неявное преобразование из типа данных nvarchar (max) в varbinary (max) не допускается).
Единственное рабочее решение - добавить новый столбец типа varbinary (max)
, преобразовать существующее значение в новый столбец и затем удалить старый столбец. Это занимает ОЧЕНЬ СЛИШКОМ МНОГО времени (в моем наборе данных около 15 ГБ это занимает около 30 минут). Вот почему я изучаю другие возможности для достижения того же (возможно, на месте = без перемещения данных и преобразования).
Решение
Я предполагаю, что вы использовали varbinary (max), потому что в вашем столбце ntext были нетекстовые данные? В этом случае, я думаю, вам нужно добавить отдельный столбец varbinary (max) в вашу таблицу, а затем запустить операцию преобразования для копирования из ntext в новый столбец. Затем удалите старый столбец и переименуйте новый столбец в старое имя.
" Неявное преобразование из типа данных nvarchar (max) в varbinary (max) не допускается " означает, что вам нужно будет четко указать конверсию.
Другие советы
Кажется, что это преобразование должно произойти в какой-то момент. Если вы выполните поиск, вы увидите, что многие люди переходят от текста к varchar (максимум) и заявляют, что конвертация занимает более 20 минут. Мои два цента после исследования в течение нескольких минут, так что не воспринимайте это как Евангелие.
Если ваша таблица просто принимает вставки, вы можете преобразовать существующие данные в таблицу хранения, а затем переименовать таблицы, чтобы хранение стало производственным. Затем переместите все вновь созданные данные из старой таблицы во время простоя. Р>
Обработка обновлений, конечно, усложняет ситуацию.
Добавление дополнительного столбца, вероятно, лучший способ. Я предпочитаю делать такие вещи поэтапно, чтобы снизить риски
<Ол>