table_oneというテーブルがあります。(7ミル)行
新しいテーブル(table_two)に0〜1ミルを挿入してから、同じテーブルに1ミル1〜2ミルを挿入します。
SET ROWCOUNT 1000000
これはどのように達成できますか?挿入する行の範囲を指定する方法はありますか?
table_oneというテーブルがあります。(7ミル)行
新しいテーブル(table_two)に0〜1ミルを挿入してから、同じテーブルに1ミル1〜2ミルを挿入します。
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
正確な行数を取得することに関心がある場合は、TOPを使用できます。
insert into Table2
select top 1000000 *
from Table1
order by ... ID? or newid() if you want random rows.
古いテーブルで開始 ID と終了 ID を取得できる場合は、次のようにすることができます。
INSERT INTO NewTable (...)
SELECT ... FROM OldTable
WHERE OldTableID BETWEEN @StartID AND @EndID
有用な ID をまだ持っていない場合は、 ROW_NUMBER ()を使用してdanihpのソリューションを使用してください。
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
テーブル全体を一括インポート形式でエクスポートし、それをテキスト ファイルとして分割してから、7 つほどの部分を複数のテーブルに一括インポートする方がよい場合があります。
もちろん、元のテーブルに SQL INSERT 操作を可能にするキーがあるかもしれませんが、これには投稿された質問に記載されていない情報が必要です。