1

table_oneというテーブルがあります。(7ミル)行

新しいテーブル(table_two)に0〜1ミルを挿入してから、同じテーブルに1ミル1〜2ミルを挿入します。

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

正確な行数を取得することに関心がある場合は、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

古いテーブルで開始 ID と終了 ID を取得できる場合は、次のようにすることができます。

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

有用な ID をまだ持っていない場合は、 ROW_NUMBER ()を使用してdanihpのソリューションを使用してください。

于 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

テーブル全体を一括インポート形式でエクスポートし、それをテキスト ファイルとして分割してから、7 つほどの部分を複数のテーブル一括インポートする方がよい場合があります。

もちろん、元のテーブルに SQL INSERT 操作を可能にするキーがあるかもしれませんが、これには投稿された質問に記載されていない情報が必要です。

于 2012-05-10T13:22:08.863 に答える