ストアドプロシージャWHERE句のオプションの属性

私は、ユーザーがアプリケーションに要求しているパラメータの一部またはすべてを渡すことができるアプリケーションを持っています。
(基本的に、彼らはいつでもさまざまなデータへの入力を止めることができます。)彼らが提供している入力に基づいて、MS SQL
2008データベースから、私が与えたパラメータだけを使って情報を取り戻したいと思います。

私はこのようなことを描いていますが、それを動作させるように見えることはできません。

CREATE PROCEDURE [dbo].[SearchForSolution]
    @Input1 int = 0, 
    @Input2 int = 0,
    @Input3 int = 0,
AS
SELECT Name, SolutionValue
FROM MyTable
WHERE (IF @Input1 != 0) { BETWEEN LowValue AND HighValue }
      AND (IF @Input2 != 0) { BETWEEN LowValue AND HighValue }
      AND (IF @Input3 != 0) { < HighValue }         
RETURN 0

明らかに、これは動作するコードではありませんが、一般的な考え方を示しています。
WHERE句の一部として変数を使用できるようにしたいのですが、マジックナンバー(この場合は0)を使用していない場合のみです。

私はここでSQLの機能に慣れていませんし、私がしたいことが可能かどうかは分かりません。私がこれまでに試したことはすべて失敗しました。もし私がここで間違った道を完全に辿っていれば、私は正しい方向のポインタを感謝するでしょう。

ベストアンサー

ここにアプローチがあります…

 SELECT 
     Name, 
     SolutionValue
 FROM 
     MyTable
WHERE
     //Compact syntax simple for optional equals filter
     FIELD1  = ISNULL(@Input1,FIELD1) 
     //intention clearer and let's you do more than equals      
     AND ( @Input2 IS NULL OR FIELD2 > @Input2 ) 
     //can be extended for Between... 
     AND ((@Input3 IS NULL or  @Input4 IS NULL)   OR  FIELD3 BETWEEN  @Input3 AND @Input4 )

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です