sql - WHERE IS NULL、IS NOT NULL 或 NO WHERE 子句取决于 SQL Server 参数值

标签 sql sql-server sql-server-2000

我在 SQL Server 2000 中有一个存储过程,它根据参数值执行搜索。对于传入的参数之一,我需要一个不同的 WHERE 子句,具体取决于其值 - 问题是 3 个值将位于 MyColumn

  1. IS NULL
  2. 不为空
  3. ANY VALUE (NULL AND NOT NULL)(基本上没有 WHERE 子句)

我在想出正确的语法时遇到了一些心理障碍。这是否可以在一个 select 语句中完成,而不执行一些 IF @parameter BEGIN ... END 分支?

最佳答案

以下是如何使用单个 WHERE 子句解决此问题:

WHERE (@myParm = value1 AND MyColumn IS NULL)
OR  (@myParm = value2 AND MyColumn IS NOT NULL)
OR  (@myParm = value3)

简单地使用 CASE 语句不起作用,我的意思是:

SELECT Field1, Field2 FROM MyTable
WHERE CASE @myParam
    WHEN value1 THEN MyColumn IS NULL
    WHEN value2 THEN MyColumn IS NOT NULL
    WHEN value3 THEN TRUE
END

可以使用 case 语句来解决此问题,请参阅 onedaywhen 的 answer

关于sql - WHERE IS NULL、IS NOT NULL 或 NO WHERE 子句取决于 SQL Server 参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/810714/

相关文章:

sql - 在 PostgreSQL 中插入带单引号的文本

mysql - 如果MySQL中某个字段被更新,如何从相关表中删除?

sql - 需要帮助来修复查询 SQL Server

具有复杂子查询的 SQL 查询

SQL Server 2000奇怪的子查询问题

mysql - 使用 IN 和其他条件的 Rails 2.x 查询无法按预期工作

mysql - 终止 Mysql 查询而不回滚更改

sql-server - 如何从 sql server 2008 Management Studio 连接提示中清除登录名下拉列表?

sql-server - SQL Server 为某些列插入相同的值

sql - 将临时表重命名为物理表