SQL 服务器中存储过程中的可选参数
Optional parameters in stored procedure in SQL Server
我不熟悉 Stack Overflow 和存储过程。我想建立一个程序来包含三个可选参数和三个相关参数。如果用户不提供那些可选参数,那么结果集将 return 所有可能给定的三个依赖。
在我看来,它类似于:
@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
然后你可以这样调用过程:
exec somename @p1 = 1
exec somename @p1 = 1, @p2 = 2
exec somename @p1 = 1, @p2 = 2, @p3 = 3
它会如您所愿地工作。使用您的方法,您实际上需要 2^N
IF
检查其中 N
是此类参数的数量。想象一下,对于 5 个参数,您需要进行 2^5 = 32
IF
检查。使用提供的方法,您将在一个查询中获得全部,并且只有 5 个检查。
我不熟悉 Stack Overflow 和存储过程。我想建立一个程序来包含三个可选参数和三个相关参数。如果用户不提供那些可选参数,那么结果集将 return 所有可能给定的三个依赖。
在我看来,它类似于:
@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
然后你可以这样调用过程:
exec somename @p1 = 1
exec somename @p1 = 1, @p2 = 2
exec somename @p1 = 1, @p2 = 2, @p3 = 3
它会如您所愿地工作。使用您的方法,您实际上需要 2^N
IF
检查其中 N
是此类参数的数量。想象一下,对于 5 个参数,您需要进行 2^5 = 32
IF
检查。使用提供的方法,您将在一个查询中获得全部,并且只有 5 个检查。