SQL Server存储过程基于输入参数值

时间:2014-11-14 17:49:58

标签: sql sql-server

create procedure sp1
(
    @p1 int = null
)
as
begin
    select f1, f2, f3 
    from table1;
end

如何添加"其中"只有当@ p1不为空时才选择查询(其中f1 = @ p1)的子句?如果@ p1为null则返回所有行!

3 个答案:

答案 0 :(得分:1)

试试这个。 where clause仅在@p1 is not null

时有效
SELECT f1,
       f2,
       f3
FROM   dbo.table1
WHERE  @p1 IS NOT NULL
       AND f1 = @p1 

如果要在@ p1为空时返回所有值,则只返回ISNULL函数。如果@ p1为Not Null,则会返回f1=@p1值,否则将返回所有值。试试这个

SELECT f1,
       f2,
       f3
FROM   dbo.table1
WHERE  f1 = isnull(@p1,f1) 

答案 1 :(得分:1)

create procedure dbo.sp1
(
    @p1 int = null
)
as
begin
select f1, f2, f3 
from dbo.table1 where(@p1 is not null and f1=@p1)
end

OR

您可以使用

此处查询如果@p1为空,则返回所有行(因为true时@ p1返回NULL

  create procedure dbo.sp1
(
    @p1 int = null
)
as
begin
select f1, f2, f3 
from dbo.table1 where(@p1 is null OR f1=@p1)
end

答案 2 :(得分:1)

如果@ p1为null,下面将返回所有内容,如果有值,则会应用该条件。

 WHERE @p1 is NULL OR f1=@p1