我有一个名为 table_one 的表。(7 百万)行
我想在新表(table_two)上插入 0 - 1 Mil,然后将 1Mil 一 - 2mil 插入同一张表。
SET ROWCOUNT 1000000
如何做到这一点?有没有办法指定要插入的行范围?
我有一个名为 table_one 的表。(7 百万)行
我想在新表(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
如果您有兴趣获得确切的行数,您可以使用TOP:
insert into Table2
select top 1000000 *
from Table1
order by ... ID? or newid() if you want random rows.
您最好以批量导入格式导出整个表,将其拆分为文本文件,然后将七个左右的部分批量导入到多个表中。
当然,原始表中可能有一些键可以进行 SQL INSERT 操作,但这需要发布的问题中未提供的信息。