Sql Server,其中大小写为空,否则不为空

时间:2010-12-21 14:30:16

标签: sql sql-server stored-procedures case

我有一个程序接收名为@FL_FINALIZADA的位变量。

如果它为null或false,我想限制我的select只显示包含null DT_FINALIZACAO值的行。否则,我想显示包含非DT_FINALIZACAO值的行。

这样的事情:

SELECT 
    * 
FROM 
    MyTable 
WHERE 
    ...
    AND
    (
        OPE.DT_FINALIZACAO = (
            CASE
                WHEN (@FL_FINALIZADA <> 1)
                    THEN NULL
                END
        ) OR 
        OPE.DT_FINALIZACAO IS NOT NULL
    )

在这种情况下,我会收到消息:

  

没有结果表达式   CASE规范可以是NULL

我怎样才能做到这一点?

提前致谢。

4 个答案:

答案 0 :(得分:7)

SELECT 
    * 
FROM 
    MyTable 
WHERE
    (ISNULL(@FL_FINALIZADA, 0) = 0
     AND
     OPE.DT_FINALIZACAO IS NULL
     )
     OR
     (@FL_FINALIZADA = 1
      AND
      OPE.DT_FINALIZACAO IS NOT NULL
     )

答案 1 :(得分:0)

将AND更改为:

AND (((@FL_FINALIZADA <> 1) AND (OPE.DT_FINALIZACAO IS NULL)) OR ( (@FL_FINALIZADA = 1) AND (OPE.DT_FINALIZACAO IS NOT NULL)))

如果位标志为1,则DT_FINALIZACAO不能为空。

答案 2 :(得分:0)

IF @FL_FINALIZADA IS NULL
    SET @FL_FINALIZADA = 0

SELECT * FROM NewsletterSubscribers 
WHERE
   (@FL_FINALIZADA = 0 AND OPE.DT_FINALIZACAO IS NULL) 
   OR 
   (@FL_FINALIZADA = 1 AND OPE.DT_FINALIZACAO IS NOT NULL)

答案 3 :(得分:-4)

我的详细SQL有点生疏,但您尝试使用0而不是NULL吗?我希望0在那个选择

中评估与NULL相同