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))
下面的代码片段是我想要实现的,但我无法让它发挥作用。如果传递到过程中的参数为空,我只想 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))