1

我有一个名为 table_one 的表。(7 百万)行

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

SET ROWCOUNT 1000000

如何做到这一点?有没有办法指定要插入的行范围?

4

5 回答 5

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
于 2012-05-10T13:14:43.437 回答
0

如果您可以在旧表中获取开始和结束 ID,则可以执行以下操作:

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

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

于 2012-05-10T13:13:33.123 回答
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
于 2012-05-10T13:16:24.773 回答
0

如果您有兴趣获得确切的行数,您可以使用TOP

insert into Table2
select top 1000000 *
  from Table1
 order by ... ID? or newid() if you want random rows.
于 2012-05-10T13:17:57.617 回答
0

您最好以批量导入格式导出整个表,将其拆分为文本文件,然后将七个左右的部分批量导入到多个表中。

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

于 2012-05-10T13:22:08.863 回答