【发布时间】:2011-04-15 22:01:02
【问题描述】:
数据库:SQL Server 2005
问题:将值从一列复制到同一个表中的另一列,十亿以上 行。
test_table (int id, bigint bigid)
尝试1:更新查询
update test_table set bigid = id
填满事务日志并由于事务日志空间不足而回滚。
尝试 2 - 以下几行的过程
set nocount on
set rowcount = 500000
while @rowcount > 0
begin
update test_table set bigid = id where bigid is null
set @rowcount = @@rowcount
set @rowupdated = @rowsupdated + @rowcount
end
print @rowsupdated
上述过程在进行时开始变慢。
尝试 3 - 创建用于更新的游标。
在 SQL Server 文档中通常不鼓励这种方法,这种方法一次更新一行,这太耗时了。
是否有一种方法可以加快将值从一列复制到另一列的速度。基本上,我正在寻找一些“神奇”的关键字或逻辑,它们将允许更新查询按顺序一次遍历十亿行。
任何提示,指针将不胜感激。
【问题讨论】:
-
为什么要表中的两列具有相同的值?也许还有另一种方法可以解决您的问题
-
我猜他已经接近 INT 数据类型在升序人工键上的 21 亿个限制,他正试图将其更改为 BIGINT。他可能已经发现你不能轻易改变:)
-
是的,迈克,布拉德的猜测是正确的。 @BradC 读心术 :-)
标签: sql sql-server sql-server-2005 tsql large-data-volumes