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