在WHERE中使用NULL

时间:2015-01-29 15:11:01

标签: sql-server tsql stored-procedures

我的存储过程采用如下可选参数:

CREATE PROCEDURE MyProc
(       
     @P1 varchar(255) = NULL
)
AS
     SELECT * FROM MyTable WHERE MyField = @P1

@P1NULL时,我想选择所有记录。一个显而易见的方法是在这里使用IF,但我想在一个SQL语句中执行此操作。有人可以建议一个聪明的方法来实现这一目标吗?我正在考虑使用ISNULL()MyField = MyField。也试过了几种方法,但NULL = NULL不是True的事实是这里的主要封锁。

3 个答案:

答案 0 :(得分:4)

一种方式:

SELECT * FROM MyTable WHERE @P1 IS NULL OR MyField = @P1

使用If...Else的另一种可能更有效的方法:

if(@P1 IS NULL)
        begin
             SELECT * FROM MyTable
        End
Else
        begin
             SELECT * FROM MyTable WHERE MyField = @P1
        End

答案 1 :(得分:0)

WHERE MyField = ISNULL(@P1, MyField)

那应该得到你需要的东西。

答案 2 :(得分:0)

其他答案为您提供了直接解决方案,但您需要使用null:

您不能对=使用等式(<>)和不等式(NULL)运算符,因为SQL将NULL视为一个永远不等于任何东西的独特值(甚至本身 - null = null是假的!)。

而是使用value is nullvalue is not null分别检查null或not null。