SQL更改包含大量数据的列数据类型

时间:2010-11-26 18:46:00

标签: sql sql-server

我有一张包含数百万条记录的表格。

我正在将一种列数据类型改为另一种(货币到十进制)

注意到执行alter语句需要很多时间。可能是因为有很多数据。

有没有办法提高此方案的效果?

3 个答案:

答案 0 :(得分:6)

在一次交易中,所有数百万行必须同时更改

另一种选择是创建一个新表,批量插入,删除旧表,重命名新表。 但是,它可能需要更长的时间。

答案 1 :(得分:3)

一种方法是使用新列类型创建临时表,将原始表中的数据复制到temp,删除原始数据,然后重命名temp。

CREATE TABLE dbo.tmp_MyTable 
   (ID Integer, Name varchar (100), MyChangedField decimal (8,2))

INSERT INTO dbo.tmp_MyTable SELECT * FROM dbo.MyTable

DROP TABLE dbo.MyTable

EXECUTE sp_rename N'dbo.tmp_MyTable', N'MyTable', 'OBJECT'

请记住,这是一个非常简单的例子。如果原始表具有索引,键和/或默认值,则还必须处理它们。

一个简单的技巧是在SQL Server Management Studio表设计器中进行更改并生成更改脚本以查看需要完成的更改。

答案 2 :(得分:0)

将新的十进制列添加到表中是否有任何好处,使用CAST()在多个批次中从money列填充它,并且当完成所有操作后,丢弃money列?