2016-05-26 13 views
2

スタックオーバーフローとストアドプロシージャの新機能です。 3つのオプションパラメータと3つの依存パラメータを含む手順を設定したいと思います。ユーザがこれらのオプションパラメータを提供しない場合、結果セットは3つの依存性を考慮してすべての可能な値を返します。SQL Serverのストアドプロシージャのオプションパラメータ

私の心の中で、それはのようなものになります。

@Color1,--optional 
@Color2,--optional  
@Color3,--optional  
@Date,--dependent  
@Item,--dependent  
@Price--dependent  

IF @Color1 IS NULL OR @Color2 IS NULL OR @Color3 IS NULL  
THEN 
    EXEC (SELECT * 
      WHERE 
       Date = @Date AND 
       Item = @Item AND 
       Price = @Price) 
ELSE 
    EXEC (SELECT * 
      WHERE 
       Color1 = @Color1 AND 
       Color2 = @Color2 AND 
       Color3 = @Color3 AND 
       Date = @Date AND 
       Item = @Item AND 
       Price = @Price) 

を、私はまだ学んでいます。あなたは、パラメータのデフォルト値を提供して、列の値にはnullにそれらを比較する必要があり、すべての

答えて

5

まず任意の助けを事前に感謝:

create procedure somename 
@p1 int, 
@p2 int = null, 
@p3 int = null 
as 
begin 

    select * from sometable 
    where col1 = @p1 and 
      (col2 = @p2 or @p2 is null) and 
      (col3 = @p3 or @p3 is null) 

end 

は、その後、あなたが呼び出すことができprocのように:

exec somename @p1 = 1 
exec somename @p1 = 1, @p2 = 2 
exec somename @p1 = 1, @p2 = 2, @p3 = 3 

期待どおりに動作します。あなたのアプローチでは、実際に2^NIFのチェックが必要です。ここで、Nはそのようなパラメータの数です。 5つのパラメータについては、2^5 = 32IFのチェックを行う必要があるとします。提供されたアプローチを使用すると、すべて1つのクエリと5つのチェックだけがあります。

+0

ありがとうございます – user6387225

関連する問題