更改列类型而不会丢失数据

You*_*sef 20 sql database column-types sql-server-2008

我正在研究SQL数据库,我有一个名为"Price"的列.创建数据库时,"价格"列设置为NVARCHAR我需要将其类型更改为decimal(18, 2)不丢失数据库中的数据.这应该由SQL脚本完成

我想到了创建一个新列,将数据移动到它,删除旧列,然后重命名新创建的列.

有人可以帮我提供一个如何做到这一点的例子吗?SQL中还有一个函数将字符串解析为十进制吗?

谢谢

aF.*_*aF. 23

您不需要两次添加新列,只需在更新新列后删除旧列:

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
Run Code Online (Sandbox Code Playgroud)

请注意,如果old_column_name不是数字,则convert可能会失败.

  • 缺少将new_column_name重命名为old_column_name的步骤,仍为+1 (8认同)