我有一张包含数百万条记录的表格。
我正在将一种列数据类型改为另一种(货币到十进制)
注意到执行alter语句需要很多时间。可能是因为有很多数据。
有没有办法提高此方案的效果?
答案 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列?