2010-09-20 53 views
1

我想将一列的值复制到SQL Server中的另一列。该操作需要在整个整个DB之间执行,其具有200M行。我的查询语法是:SQL Server中从一列到另一列的数据批量复制

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

但是,很快我耗尽事务日志并且查询中止。什么是批量发起这个最好的方法?

谢谢,

+1

我必须问:为什么? – 2010-09-20 18:56:53

回答

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 

等等

+0

这是什么ID?这是一个有效的列吗? – Neel 2010-09-20 18:27:36

+0

这张表有一个复合键,没有ID字段 – Neel 2010-09-20 18:28:18

+0

我只是做了一个例子。 – DForck42 2010-09-20 20:23:26

1

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

您既可以选择所有的数据到一个新的表和字段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 
0

我会考虑在SSIS这样做,你可以很容易地控制批(事务)的大小,并采取批量操作SSIS提供的优势。当然,如果你需要一个程序化的解决方案,这可能不起作用。这将是一个非常微不足道的SSIS操作。

+0

什么是SSIS?对不起,如果这听起来微不足道。 – Neel 2010-09-20 18:38:20

+0

@ user350129:SQL Server集成服务 - http://www.microsoft.com/sqlserver/2008/en/us/integration.aspx – 2010-09-20 19:09:36

相关问题