我不是SQL专家,这让我很困惑。

我有一个正在调用的存储过程。我将名为@Requested的变量传递给它,该变量用作布尔值。

我正在尝试:

SELECT
    ID
FROM
    SomeTable
WHERE
    Requested = CASE @Requested WHEN 0 THEN IS NULL WHEN 1 THEN IS NOT NULL END
;


我在SQL Server Management Studio中收到错误消息,指出Incorrect syntax near 'IS'

显然,如果我执行THEN 'some string',则上面的代码有效。

我已经完成了Requested CASE ...和Requested = CASE

本质上我想要的是

Requested IS NULL


要么

Requested IS NOT NULL


基于作为@Requested传入的值。

有任何想法吗?

谢谢

最佳答案

通过WHERE语句在OR子句中使用这两个条件。这就创建了一个条件,其中基于@Requested变量的值使用了适当的逻辑。

Select   ID
From     SomeTable
Where    ((@Requested = 0  And Requested Is Null)
    Or    (@Requested = 1  And Requested Is Not Null));

关于sql-server - 有没有一种方法可以基于变量将WHERE子句中的比较设置为IS NULL或IS NOT NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41510626/

10-13 07:46