SQL Server - 将一组特定的行从一个表插入另一个表

时间:2012-05-10 13:09:12

标签: sql sql-server sql-server-2005

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

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

SET ROWCOUNT 1000000

如何实现这一目标?有没有办法指定要插入的行范围?

5 个答案:

答案 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 formatsplitting将其作为文本文件导出,然后将bulk importing七个左右的部分导出到几个表格中。

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