次のようなストアド プロシージャがあるとします。
CREATE PROCEDURE People_Select
@LastName nvarchar(25) = NULL,
@FirstName nvarchar(25) = NULL,
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM People
WHERE (@LastName IS NULL OR (LastName = @LastName))
AND (@FirstName IS NULL OR (FirstName = @FirstName))
OPTION (RECOMPILE)
END
これが実行され、パラメータの少なくとも 1 つ (または両方) が設定されている場合、完全に機能します。ただし、どちらのパラメーターも設定せずに呼び出した場合、People テーブルからすべての行が返されます。これは特に、People テーブルに何百万ものレコードがある場合に問題になります。
(私の場合)好ましい機能は、パラメータが設定されていない場合、何も返さないことです。lastName が null かどうか、および firstname が null で何も返さないかどうかを簡単に確認できますが、これを行うよりエレガントな方法はありますか? ストアド プロシージャに 20 個のオプション パラメータがあるとしたらどうなるでしょうか。それらが最初にすべて null であるかどうかを確認して何も返したくない..もっと簡単な方法はありますか? ありがとう。