Sql server 2008 SQL Server中存储过程中的可选参数

Sql server 2008 SQL Server中存储过程中的可选参数,sql-server-2008,stored-procedures,optional-parameters,Sql Server 2008,Stored Procedures,Optional Parameters,我不熟悉堆栈溢出和存储过程。我想建立一个程序,包括三个可选参数和三个相关参数。如果用户没有提供这些可选参数,那么结果集将返回所有可能的参数,因为这三个参数是依赖的 在我看来,它类似于: @Color1,--optional @Color2,--optional @Color3,--optional @Date,--dependent @Item,--dependent @Price--dependent IF @Color1 IS NULL OR

我不熟悉堆栈溢出和存储过程。我想建立一个程序,包括三个可选参数和三个相关参数。如果用户没有提供这些可选参数,那么结果集将返回所有可能的参数,因为这三个参数是依赖的

在我看来,它类似于:

@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)

但我还在学习。提前感谢您的帮助

首先,您应该提供参数的默认值,然后将其与列值或空值进行比较:

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
它会像你期望的那样工作。在您的方法中,如果检查其中的
N
是此类参数的数量,则实际上需要
2^N
。假设对于5个参数,如果进行检查,则需要执行
2^5=32
。使用提供的方法,您将在一个查询中进行所有查询,并且只有5个检查