0

鉴于此 T-SQL 代码:

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 

我收到错误消息:

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

这是为什么?

4

2 回答 2

1

如果您将第一个位的零表示为“假”,则查询应等效于:

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 

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

于 2013-05-21T16:03:09.583 回答
0

您将第一个CASE语句传递给调用CAST而不是条件。错误消息几乎说明了它。

我不确定你到底想要做什么,但你似乎明白你需要CASE WHEN根据你随后的使用将布尔值传递给,CASE所以希望这会有所帮助。

通过尝试将代码更改为以下内容,这是在黑暗中拍摄:

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 
于 2013-05-21T15:56:20.103 回答