在 WHERE 中使用 NULL

Using NULL in WHERE

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

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

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

一种方式:

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

WHERE MyField = ISNULL(@P1, MyField)

这应该能满足您的需求。

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

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

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