2011-02-07 12 views
1

たとえば、10000行を返すクエリがあるとします。 SQL Serverでこのクエリを構成して、それぞれ1000行の塊で結果を返すことは可能ですか?だから、私のアプリケーションは1000行を受け取って処理し、その間にSQL Serverは次の1000行などを送信しようとしていますか?SQL Serverのチャンクで結果セットを取得

これは、SQL Serverで2005

答えて

3

SQL Serverは、あなたのネットワークパケットストリーム(サーバーに接続するためにTCP/IPを使用すると仮定)として提供され、結果セットを、提供します。

本当にハードコアになりたい場合は、ワイヤプロトコルを実装してネット経由でSQL Serverにアクセスし、TCPストリームで作業することができます。しかしこれは大きな仕事であり、実際にはお勧めできません。

もう1つの可能性は、一度ではなく、複数のクエリを使用して、それぞれが結果セットの特定の「ウィンドウ」を取得することです。これは「サーバーサイドページング」と呼ばれます。どのようにして完了したかの説明については、thisの記事を参照してください。

もう1つの方法は、クライアント側でストリームベースのアクセスを使用することです。たとえば、ADO.NETをクライアントとして使用する場合は、SqlDataReaderを使用して一度に1行を取得できます(バックグラウンドでは、データはネットワーク経由でチャンクで配信されますが、透過的です)。しかし、それはあなたが指定していないクライアントに依存します。

+0

サーバー側のページングを行い、クライアント側でいくつかの呼び出しを行うだけで、リストに入れても意味がありますか? 1つの巨大な呼び出しを行い、そのリストを返すのではなく、結果をリストに追加してそれを返す小さな呼び出しを行います。応答時間やメモリ使用量を改善できますか?小さいコールの間には処理がありません。 – KTrum

+0

@KTrum:クライアント上のレコードのリストを作成したいだけで、リストが完成するまで待たなければならない場合、サーバー側のページングは​​役に立ちません。次のページを待っている間に処理を開始できる場合は、待ち時間を短縮できます。小さな結果に対してpagewise処理を行うことができれば、ページングは​​メモリー消費を減らします。 – TToni

関連する問題