鉴于此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
的上下文中指定的非布尔类型的表达式
为什么?
答案 0 :(得分:1)
如果你的意思是零,那么" 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
你可能需要小心这个" OR"条款,或添加括号以澄清。我在这里猜到了。
答案 1 :(得分: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