1

別のレガシー システムにフィードするために、Excel ドキュメントに複数の Excel シートを作成する必要があります。コードを変更できないこのレガシー システムは、サイズが 10 MB を超えるデータを含むシートを受け入れません。

現時点では、SQL クエリを使用してすべてのデータを取得する手動プロセスがあります。これを一時ワークブックにダンプし、それを複数のワークブックに分割して、各ワークブックが 10 MB を超えないようにします。次に、これらのワークブックの各シートを、複数のシートを持つ 1 つの大きなワークブックにまとめます。

返されるすべてのレコードの合計サイズが 10 MB を超えない限り、テーブルからすべてのレコードを取得できる単一のクエリを使用して、この多段階プロセスを簡素化したいと考えています。また、SQL クエリを使用して返される次の 10MB のデータを指定できるようにしたいと考えています。小さなプログラムを作成することは、ここではオプションではありません。クエリで指定する列の数は変更できます。SQLクエリのみを使用してこれを実行できるようにしたいと考えています。

SQL Server 2008 を使用してこのようなことを行うことはできますか?

4

2 に答える 2

1

各ワークブックのレコード数を修正して使用することをお勧めしますrow_number()

select seqnum / 100000 as WhichWorksheet, <columns you want>
from (select s.*, row_number() over (order by (select NULL)) as seqnum
      from (<your subquery here>) s
     ) s

(これは、各ワークシートに 100000 行が必要であることを想定しています。)

SQL Server の各行のサイズを推測することができます。しかし、10M バイトの意味を理解するのは困難です。Excel で測定した 10M バイトのことですか? CSVファイルで10Mbyteということですか?データベースストレージで 10M バイトということですか? または、これらの質問を無視して、過去に機能した行をいくつか選択し、他のことに移ることもできます。

于 2013-07-08T15:50:59.673 に答える
1

一時テーブルを使用EXEC sp_spaceused 'tablename'して、10MB のスペースに収まる行数を見積もることができます。その後、 を使用ROW_NUMBER()してページングを設定できます。

あなたが興味を持っていることを行うためのより良い方法があるかどうか聞いてみたいと思います.

于 2013-07-08T15:46:48.433 に答える