2014-11-14 135 views
-1
create procedure sp1 
(
    @p1 int = null 
) 
as 
begin 
    select f1, f2, f3 
    from table1; 
end 

如何仅在@ p1不为空时将“where”子句添加到select查询(其中f1 = @ p1)?如果@ p1为null,则返回所有行!基于输入参数值的SQL Server存储过程

回答

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

OR

可以使用

这里查询返回的所有行如果@p1为空(因为@ P1返回trueNULL

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

但是我想在@ p1为空时选择所有行! – Jalil 2014-11-14 17:56:29

+0

@Jalil你可以使用第二个 – 2014-11-14 17:59:00

+1

@Jalil那么你应该明确地在你的问题中提出这个要求 – Lamak 2014-11-14 18:01:52

1

试试这个。该where clause将工作只有当@p1 is not null

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

如果你想返回所有的值,如果@ P1为null,则只是一个ISNULL功能。如果@ p1为Not Null,则将返回[email protected]值,否则将返回所有值。试试这个

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

也许不是代码运行,但它使得它更容易理解你的意图是什么。 – user2366842 2014-11-14 17:59:03

1

在case @ p1为空,下面将返回每一件事情,如果有我是一种价值,它会适用于这种情况。

WHERE @p1 is NULL OR [email protected]