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

时间:2012-06-11 09:48:03

标签: sql database sql-server-2008 column-types

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

完成

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

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

由于

4 个答案:

答案 0 :(得分:20)

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

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可能会失败。

答案 1 :(得分:2)

喜欢的东西

Alter Table [MyTable] Add Column NewPrice decimal(18,2) null

Then

Update [MyTable] Set NewPrice = Convert(decimal(18,2),[Price]) Where Price is not null

如果上述情况失败,那么你需要加强处理好玩的事情

一旦您满意,请使用Alter Table删除旧列,并使用sp_rename重命名新列

答案 2 :(得分:0)

您可以使用Management Studio直观地进行这些更改。然后,使用按钮"生成更改脚本"获取您所做更改的脚本。请务必在原始ddbb的副本中进行所有测试,以防出现问题..

答案 3 :(得分:0)

如果您只想更改列的数据类型,可以这样做=>

Alter Table YourTableName
Alter Column ColumnName DataType 

我已经在SQL Server 2012及其工作上对此进行了测试。