我想将一列的值复制到SQL Server中的另一列。此操作需要在具有 200M 行的整个数据库中执行。我的查询语法是:
UPDATE [Net].[dbo].[LINK]
SET [LINK_ERRORS] = [OLD_LINK_ERRORS]
然而,很快我耗尽了事务日志并且查询中止了。分批启动这个的最佳方法是什么?
谢谢,
答案 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操作。