SQL Server 2000 データベースに対する非常に長いクエリがあり、C# アプリケーションでさらに処理するために結果を返しています。
次のクエリを検討してください。
declare @sn varchar(20)
select distinct serial_number
from manufacturingData
where '7/19/2012'<date_time
order by serial_number
while (0 < (select count(serial_number) from #sn)) begin
select top 1 @sn=serial_number from #sn
exec sp_GetSnData @sn
delete from #sn where serial_number=@sn
end
drop table #sn
このクエリを に書いている07/19/2012
ので、今日のレコードのみが返されます。
上記のクエリ (今日の半分) は、119 個の異なるシリアル番号を返し、それに付随する while ループの実行に 52 秒かかりました。
通常、このレポートは 30 日間実行され、約 3500 の部品番号があります。
生成された結果にアクセスできるように、結果セットに「フック」する方法はありますか?
現在のやり方では、クエリに 2 分かかるのか、2 日かかるのか、それともまだ何かを実行しているのかは誰にもわかりません! マネージャーはコンピュータをシャットダウンしてその日のうちに家に帰りますか、それともこのレポート クエリはもうすぐ終了しますか?
個々のテーブルが返されたら、各テーブルを個別に処理する必要があります。
できればよかった
- 返された個別のアイテムの数を確認し、
- 現在問い合わせ中の項目
- 次のテーブルが来るのを待っている間に、結果のテーブルを処理できるようにします。
これは可能ですか?
参考までに: 私は現在、サーバーに個々の要求を送信することにより、Windows フォームでこれを行っていますが、これはサーバーを停止させ、利用可能なすべての接続を使い果たしています。