首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指定的非布尔型表达式

指定的非布尔型表达式
EN

Stack Overflow用户
提问于 2013-05-21 15:53:14
回答 2查看 2.9K关注 0票数 0

考虑到这个this代码:

代码语言:javascript
复制
SELECT CASE 
         WHEN ( Cast (CASE 
                        WHEN Isnull(bpe.new, 0) = 0 
                             AND Isnull(bpe.regular, 0) = 0 
                             AND Isnull(bpe.bargain, 0) = 0 THEN 0 
                        ELSE 1 
                      END AS BIT) 
                AND @siteID IS NULL 
                 OR bpe.siteid = @siteID ) THEN 1 
         ELSE 0 
       END AS SiteHasBrandException 
FROM   brandpromoexceptions AS bpe 

我得到了错误消息:

在预期条件的上下文中指定的非布尔型表达式

为什么会这样呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-21 16:03:09

如果对第一个位表示零为"false“,则查询应等效于:

代码语言:javascript
复制
SELECT CASE WHEN 
NOT ( ISNULL(bpe.new, 0) = 0 
      AND Isnull(bpe.regular, 0) = 0 
      AND Isnull(bpe.bargain, 0) = 0 )
AND ( @siteID IS NULL 
      OR bpe.siteid = @siteID )
THEN 1 
ELSE 0 
END AS SiteHasBrandException 
FROM brandpromoexceptions AS bpe 

您可能需要小心使用“或”子句,或添加括号以进行澄清。我猜到这里了。

票数 1
EN

Stack Overflow用户

发布于 2013-05-21 15:56:20

您将第一个CASE语句传递给CAST,而不是一个条件。错误信息很大程度上说明了这一点。

我不清楚您到底要做什么,但您似乎明白,需要根据后续使用CASE WHENCASE传递一个布尔值,因此希望这会有所帮助。

通过尝试将代码更改为以下代码,这是一次黑暗的尝试:

代码语言:javascript
复制
SELECT CASE 
     WHEN ( Cast (CASE 
                    WHEN Isnull(bpe.new, 0) = 0 
                         AND Isnull(bpe.regular, 0) = 0 
                         AND Isnull(bpe.bargain, 0) = 0 THEN 0 
                    ELSE 1 
                  END AS BIT) = 1
            AND @siteID IS NULL 
             OR bpe.siteid = @siteID ) THEN 1 
     ELSE 0 
   END AS SiteHasBrandException 
FROM   brandpromoexceptions AS bpe 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16674284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档