結果セットをフィルター処理するために使用する複数のパラメーター (場合によっては最大 7 または 8) を取るストアド プロシージャがあります。これらのパラメーターはオプションです (デフォルトNULL
)。渡された NULL 以外の値はすべてフィルターで使用されます (つまり、 booleanand
ではなく booleanor
です)。
これらのクエリは通常、次のようになります...
SELECT *
FROM [MyTable]
WHERE (@Param1 IS NULL OR (@Param1 IS NOT NULL AND [Field1] = @Param1))
AND (@Param2 IS NULL OR (@Param2 IS NOT NULL AND [Field2] = @Param2))
AND (@Param3 ...
これが非常に非効率的であることは承知していますが、パラメーターの数が多いため、それらを個々のクエリに分割することはできません。
代わりに、次のことを試しました...
SELECT *
FROM [MyTable]
WHERE [Field1] = ISNULL(@Param1, [Field1])
AND [Field2] = ISNULL(@Param2, [Field2])
AND [Field3] ...
ただし、フィールドに含まれている場合に問題が発生するNULL
ため、=
演算子は機能しません。
複数の「フィルター」パラメーターを使用して単一のクエリを作成できるように、これを行う簡単で効率的な方法はありますか? 可能であれば、動的 SQL を使用しないことをお勧めします。