SQL 服务器 WHERE 子句:列 IS NULL 或列 = 参数值

SQL Server WHERE clause : column IS NULL or column = parameter value

下面的代码片段是我想要实现的,但我无法让它发挥作用。如果传递到过程中的参数为空,我只想 return 带有 WHERE 子句的行 IS NULL,但如果有值,我想 return 等于传入值的行。动态 SQL 似乎可行,但我很好奇我是否缺少更简单的方法。提前致谢。

PARAM:

@id varchar(10) = '123456789'

SELECT * 
FROM TABLE T
WHERE
    CASE
        WHEN @id IS NULL THEN (id IS NULL)
        ELSE id = @id
    END

你想要的逻辑是:

WHERE (@id IS NULL AND id IS NULL) OR
      id = @id

您正在尝试将 CASE 表达式 用作 Case (Switch) 语句。 T-SQL 中不存在开关,CASE 表达式 returns 标量值不是布尔结果。

但是,不要在 WHERE 中使用 CASE 表达式,使用正确的布尔逻辑:

SELECT *
FROM YourTable YT
WHERE (ID = @ID
   OR  (ID IS NULL AND @ID IS NULL))