Изменение типа столбца без потери данных

Я работаю над базой данных 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, если что-то пойдет не так.