うまくいけば、これは簡単です。約500行以上を返すストアドプロシージャを最適化しています。私の計画は、取得する行がなくなるまで行をバッチで返すことです。
たとえば、行0〜49、次に50〜99、次に100〜149というようになります。
私は次のSQLコードを使用してこれを達成しました:
CREATE PROCEDURE [dbo].[mySP]
@rowstart int,
@rowend int
AS
WITH MainQuery AS
(
HUGE SELECT STATEMENT HERE
)
select * from MainQuery where row between @rowstart and @rowend
このSPを実行するときは、rowstartとrowendの値を渡すだけで、必要な行の範囲が完全に返されます。
問題は、各クエリの後に取得する行がもっとあることを知りたいということです。MainQueryブロックの完了後に@@ROWCOUNTを返すことでそれを達成できると思いますが、SPが実行されるたびに返される行の範囲と@@ROWCOUNTの値を取得する方法がわかりません。
50行を返すという最初のクエリを実行するときに、合計503行のテーブル行があることがわかった場合は、簡単な計算(503/50)を実行して、SPを呼び出す必要がある回数を計算できます。どんな助けでも大歓迎です!