在SQL Server中将数据从一列批量复制到另一列

时间:2010-09-20 18:10:00

标签: sql-server

我想将一列的值复制到SQL Server中的另一列。此操作需要在具有 200M 行的整个数据库中执行。我的查询语法是:

UPDATE [Net].[dbo].[LINK]
SET  [LINK_ERRORS] = [OLD_LINK_ERRORS]

然而,很快我耗尽了事务日志并且查询中止了。分批启动这个的最佳方法是什么?

谢谢,

3 个答案:

答案 0 :(得分:1)

更新200M行不是一个好主意。

您可以将所有数据选择到新表中并复制SELECT中的LINK_ERRORS字段,

select *, OLD_LINK_ERRORS as LINK_ERRORS into LINK_tmp from LINK
GO
exec sp_rename LINK, LINK_bkp
GO
exec sp_rename LINK_tmp, LINK
GO
drop table LINK_bkp

或者如果你要做的下一件事是将原来的OLD_LINK_ERRORS列归零,你可以这样做:

sp_rename 'LINK.OLD_LINK_ERRORS', 'LINK_ERRORS', 'COLUMN'
GO
ALTER TABLE LINK ADD OLD_LINK_ERRORS <data type>
GO

答案 1 :(得分:0)

多个更新可能有效。

update dbo.LINK
set LINK_ERRORS=OLD_LINK_ERRORS
where ID between 1 and 1000000

update dbo.LINK
set LINK_ERRORS=OLD_LINK_ERRORS
where ID between 1000001 and 2000000

等...

答案 2 :(得分:0)

我会考虑在SSIS中执行此操作,您可以轻松控制批处理(事务)大小并利用SSIS提供的批量操作。当然,如果您需要程序化解决方案,这可能不起作用。这将是一个非常简单的SSIS操作。