Изменение типа столбца без потери данных
Я работаю над базой данных SQL, у меня есть столбец с названием "Цена". Когда база данных была создана, столбец "Цена" был установлен в NVARCHAR
Мне нужно изменить его тип на decimal(18, 2)
, не теряя данные в базе данных. Это должно быть сделано с помощью SQL Script
Я думал о создании нового столбца, перемещении данных на него, удалении старого столбца и последующем переименовании вновь созданного столбца.
Может кто-нибудь помочь мне с примером о том, как это сделать?
Также есть функция в SQL для того, чтобы разбить строку на десятичную?
Спасибо
Ответы
Ответ 1
Вам не нужно добавлять новый столбец два раза, просто удалите старый после обновления нового:
ALTER TABLE table_name ADD new_column_name decimal(18,2)
update table_name
set new_column_name = convert(decimal(18,2), old_column_name)
ALTER TABLE table_name DROP COLUMN old_column_name
Обратите внимание, что если old_column_name
не является числовым, convert
может выйти из строя.
Ответ 2
Что-то вроде
Изменить таблицу [MyTable] Добавить столбец NewPrice decimal (18,2) null
Тогда
Обновить [MyTable] Установить NewPrice = Конвертировать (десятичное (18,2), [Цена]) Где цена не равна нулю
Если вышеописанное терпит неудачу, вам нужно усилить его, чтобы справиться со смехами
Как только вы счастливы, сбросьте старый столбец с таблицей Alter и переименуйте новый с помощью sp_rename
Ответ 3
Вы можете сделать эти изменения визуально с помощью Management Studio. Затем используйте кнопку "Сгенерировать изменение Script", чтобы получить script для внесенных вами изменений. Обязательно сделайте все тестирование в копии исходного ddbb, если что-то пойдет не так.