我有一个名为table_one的表。 (7Mil)行SQL Server - 从一个表插入一组特定的行到另一个表
我想在一个新表(table_two)上插入0-1 Mil,然后将1Mil一个-2mil插入到同一个表中。
SET ROWCOUNT 1000000
这怎么能实现?有没有办法指定要插入的行的范围?
我有一个名为table_one的表。 (7Mil)行SQL Server - 从一个表插入一组特定的行到另一个表
我想在一个新表(table_two)上插入0-1 Mil,然后将1Mil一个-2mil插入到同一个表中。
SET ROWCOUNT 1000000
这怎么能实现?有没有办法指定要插入的行的范围?
您可以使用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
如果你能得到的开始和您的旧表结束的ID,你可以做这样的事情:
INSERT INTO NewTable (...)
SELECT ... FROM OldTable
WHERE OldTableID BETWEEN @StartID AND @EndID
如果您还没有一个有用的ID,使用danihp的解决方案使用ROW_NUMBER()。
如果没有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
你忘了where子句! – danihp
如果你有兴趣在得到确切行数,你可能会雇用TOP:
insert into Table2
select top 1000000 *
from Table1
order by ... ID? or newid() if you want random rows.
你可能会更好的是将整个表输出在bulk import format,splitting它作为一个文本文件,然后把bulk importing这七个左右的部分放到几个表中。
当然,原始表中可能有键可以使用SQL INSERT操作,但这需要发布的问题中未提供的信息。
你有一个'ID'或'DateTime'列或可用于分页的东西吗? –