我有一个名为table_one的表。 (7 Mil)行
我想在新表(table_two)上插入0 - 1 Mil,然后将1Mil 1 - 2mil插入到同一个表中。
SET ROWCOUNT 1000000
如何实现这一目标?有没有办法指定要插入的行范围?
答案 0 :(得分: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
答案 1 :(得分:0)
如果您可以在旧表中获取开始和结束ID,则可以执行以下操作:
INSERT INTO NewTable (...)
SELECT ... FROM OldTable
WHERE OldTableID BETWEEN @StartID AND @EndID
如果您还没有有用的ID,请使用ROW_NUMBER()使用 danihp 的解决方案。
答案 2 :(得分: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
答案 3 :(得分:0)
如果您有兴趣获取确切的行数,可以使用TOP:
insert into Table2
select top 1000000 *
from Table1
order by ... ID? or newid() if you want random rows.
答案 4 :(得分:0)
您可能最好将整个表格导出bulk import format,splitting将其作为文本文件导出,然后将bulk importing七个左右的部分导出到几个表格中。
当然,原始表中可能存在可以使用SQL INSERT操作的键,但这需要在发布的问题中未提供的信息。