考虑到这个this代码:
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 我得到了错误消息:
在预期条件的上下文中指定的非布尔型表达式
为什么会这样呢?
发布于 2013-05-21 16:03:09
如果对第一个位表示零为"false“,则查询应等效于:
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 您可能需要小心使用“或”子句,或添加括号以进行澄清。我猜到这里了。
发布于 2013-05-21 15:56:20
您将第一个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 https://stackoverflow.com/questions/16674284
复制相似问题