個別にすべてオプションであるパラメーターを持つストアド プロシージャを作成することは可能ですが、パラメーターの少なくとも 1 つを指定する必要がありますか?
たとえば、レコードを更新するプロシージャがある場合、レコード ID を渡してから、更新する列を少なくとも 1 つ渡す必要があります。この手順では、追加のパラメーター/列が少なくとも 1 つ指定されていることを確認する必要があります。
個別にすべてオプションであるパラメーターを持つストアド プロシージャを作成することは可能ですが、パラメーターの少なくとも 1 つを指定する必要がありますか?
たとえば、レコードを更新するプロシージャがある場合、レコード ID を渡してから、更新する列を少なくとも 1 つ渡す必要があります。この手順では、追加のパラメーター/列が少なくとも 1 つ指定されていることを確認する必要があります。
最初のアクションとして if ステートメントを入れます。
IF @param1 is null and @param2 isnul and @param3 is null
Begin
--steps tpo raise an error or exit the proc
End
これは、ストアドプロシージャではなく、選択したプログラミング言語で行います。なんで?これは、TSQLがあまり得意ではないタイプのロジックチェックです。これをチェックするための構文は「厄介」で、遅くなります。
また、ストアドプロシージャがもたらす最大のパフォーマンス上の利点は、コンパイル済みSQLの実行です。この場合、SQLを動的に構築する必要があるため、その利点は失われます。したがって、なぜそれをストアドプロシージャとして使用するのでしょうか。
where句で次を使用します
where
(isnull(@param1,0)=0 or id=@param1)
and
(isnull(@param2,'')='' or name=@param2)