将数据表从一个表移动到另一个数百万条记录

问题描述:

我想将数据从一个表移动到另一个表,但他们的表中包含数百万条记录,可能会被使用。将数据表从一个表移动到另一个数百万条记录

所以,我不想一次移动所有的数据,想到一个循环,我先移动几行,然后移动其他几行。

这样表格不会被锁定。

正常的查询会是这样的

INSERT INTO Table2 (<columns>) 
SELECT <columns> 
FROM Table1 
WHERE <condition>; 

DELETE FROM Table1 
WHERE <condition>; 

COMMIT; 

但是,任何人都可以提出,对数百万行的,我怎么能在一个循环格式移动几行?

+0

还没有尝试过,但不会删除顶部+输出的工作? –

我建议你阅读这篇文章http://sqlserverplanet.com/data-warehouse/transferring-large-amounts-of-data-using-batch-inserts 他们正在使用while循环,请花些时间阅读评论。祝你好运!

Select 1; 
while (@@ROWCOUNT > 0) 
BEGIN 
Drop table #t; 
SELECT top(10) <columns> into #t FROM Table1 WHERE <condition>; 

INSERT INTO Table2 (<columns>) 
Select * from #t 

DELETE FROM Table1 WHERE idcol in(select idcol from #t); 
End 

试试这个查询。它将一次插入10行。