2012-05-10 190 views
1

我有一个名为table_one的表。 (7Mil)行SQL Server - 从一个表插入一组特定的行到另一个表

我想在一个新表(table_two)上插入0-1 Mil,然后将1Mil一个-2mil插入到同一个表中。

SET ROWCOUNT 1000000 

这怎么能实现?有没有办法指定要插入的行的范围?

+1

你有一个'ID'或'DateTime'列或可用于分页的东西吗? –

回答

2

您可以使用row_number

;with cte as (
    select 
     *, 
     row_number() over(order by some_field) as rn 
    from table_one 
) 
insert into table_two (fields) 
    select fields from cte 
    where rn < 1000000 
0

如果你能得到的开始和您的旧表结束的ID,你可以做这样的事情:

INSERT INTO NewTable (...) 
SELECT ... FROM OldTable 
WHERE OldTableID BETWEEN @StartID AND @EndID 

如果您还没有一个有用的ID,使用danihp的解决方案使用ROW_NUMBER()

0

如果没有ID的范围,您可以使用ROW_NUMBER()生成它们:

with toinsert (
    select *, row_number() over (partition by NULL order by <whatever>) as rownum 
    from OldTable 
) 
insert into NewTable(...) 
    select ... from toinsert 
+2

你忘了where子句! – danihp

0

如果你有兴趣在得到确切行数,你可能会雇用TOP

insert into Table2 
select top 1000000 * 
    from Table1 
order by ... ID? or newid() if you want random rows. 
0

你可能会更好的是将整个表输出在bulk import format,splitting它作为一个文本文件,然后把bulk importing这七个左右的部分放到几个表中。

当然,原始表中可能有键可以使用SQL INSERT操作,但这需要发布的问题中未提供的信息。

相关问题