SQL Server 中更改列数据类型的最快方法

3

在SQL Server 2008中,我有一个大约有300万条记录的表。我想将其中一个列的类型从float更改为int。但似乎需要很长时间。有没有快速完成此操作的方法?

5个回答

2
删除该表的任何约束、索引和触发器,因为它们会减慢更新速度。

2

向表中添加一个新的整数列,将新的列更新为旧列的值,删除旧列,重命名新列。

我的直觉告诉我这样做会更快,但我也可能错了!

我假设由于现在是浮点型,所以它没有用在任何索引中。


1
你可以尝试创建新表并制作小游标,以便将数据从一个表发送到另一个较小的表中。
如果您的表具有日期字段,您可以按季度移动数据,这样您就可以在查询之间留出时间来喘息。

我关闭了SQL Server以取消耗时的数据类型更改过程(这需要很长时间)。但是现在我重新启动了SSMS,无法浏览我的数据库中的表格,并且出现以下错误:错误1222:锁请求超时!我应该等待锁被释放吗? - B Faley
有时候,当服务器负载较重时,SSMS可能无法浏览表。 - adopilot

0
很可能这里发生的是 SSMS 正在创建一个带有旧架构的临时表,并将所有行复制到该表中。然后它会创建一个新表,带有新架构,并从旧表中复制回行。我不认为在 SSMS 中有任何设置可以更改这个问题,这可能是实现此特定架构更改的唯一方法。
兰迪

0

通常情况下,使用“ALTER TABLE”操作要比使用 SSMS 更快。但在这种情况下,我同意 doogstar 的观点,因为您必须将所有的数据转换为整数,所以我会创建一个新列并将其填充(您可以分批处理以提高性能并避免表锁定),然后删除旧列并重命名新列。


这是一种介于基于集合和循环技术之间的方法,以下链接展示了如何实现:http://www.tek-tips.com/faqs.cfm?fid=3141 - HLGEM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接