2012-06-11 195 views
10

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

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

有人可以帮我一个例子如何做到这一点? 也有在SQL中解析字符串到小数的函数吗?

感谢

+0

您是否已经完成了一些关于如何执行此操作的研究?你有什么,你卡在哪里? – Pablo

回答

14

你并不需要添加一个新列两次,只是删除旧的更新新一后:

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

+5

缺失步骤,您将new_column_name重命名为old_column_name,仍为+1 –

0

您可以使用Management Studio以可视方式进行这些更改。然后,使用“生成更改脚本”按钮来获取您所做更改的脚本。一定要做好所有的测试在原ddbb的副本,以防出错..

+0

注 - 如何找到:http://stackoverflow.com/questions/6247556/generate-changes-script –

2

ALTER TABLE [MyTable的]添加列NewPrice十进制(18,2)空

然后

更新[MyTable的]设置NewPrice =转换(十进制(18,2)[参考价格])如果价格不为空

如果上述失败,那么你就需要来加强它对付牛仔

一旦开心,用Alter Table删除旧列并用sp_rename重新命名新列

相关问题