26

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

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

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

谢谢

4

4 回答 4

29

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

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

于 2012-06-11T09:51:57.483 回答
4

就像是

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

于 2012-06-11T12:17:41.837 回答
3

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

Alter Table YourTableName
Alter Column ColumnName DataType 

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

于 2018-04-10T05:46:19.590 回答
0

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

于 2012-06-11T09:54:08.113 回答