2010-09-20 57 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

相關問題