2011-10-27 12 views
2

特定のユーザーのすべての通知を返すストアドプロシージャGetNotificationsを作成しました。他の開発者はこのSPをさまざまな場所で使用しています。SQLストアドプロシージャより優れたアプローチはありますか?

これで、すべての通知を同時にユーザーに流さないように、ページング機能を実装する必要がありました。

既存のSPは使用されているため、変更することはできません。

私はページング機能を備えた別のSPを作成できますが、それはたくさんの繰り返しコードを必要とするため、実際にはやりたくありません。将来は通知を受け取るためにビジネスロジックを変更すると、

これは私ができることです:GetNotificationsを内部的に呼び出す新しいSPを作成し、返された結果セットにページングを実装します。しかし、GetNotificationsは結果に関係なくすべての結果を返すので、サーバーに不必要な負荷がかかることはありませんか?

あなたはこの問題にアプローチするより良い方法を考えることができますか?

+1

クエリのコア部分をビューまたはテーブル値関数にリファクタリングすることはできますか? –

答えて

8

オプションのパラメータを使用してストアドプロシージャを変更して、ページ機能、またはすべての結果(デフォルト)を返します。これにより、既存のコードを破ることなく、必要な機能が得られるはずです。 0は、両方のために渡された場合それ以外のページングを行い、すべての行を返すparamsは@PageNumber、@RowsPerPage

3

は2つのparamsにかかる1つのストアドプロシージャを持っています。

既存のコードを更新してargsに0/0を渡すと、ページングが必要なときに新しいコードが実際の値に渡されます。

コメントに示唆されているように、パラメータのデフォルト値0/0を指定すると、既存のコードを更新する必要はありません。

+4

最後にvaraiblesを追加し、戻り値allになる変数のデフォルト値がある場合、procを呼び出す既存のコードを変更する必要はありません。 – HLGEM

関連する問題