我正在尝试将以下逻辑表达式用作Microsoft SQL Server 2012存储过程的一部分,其中@filter1
和@filter2
的类型为bit
(即布尔值)。
((@filter1 <> 0) = (T.ID = '123')) and
((@filter2 <> 0) or (T.FK is null))
我在第一个=
收到语法错误。显然,布尔项的结果可以使用AND
和OR
进行组合,但不能检查与其他此类术语的相等性。
确实如此,如果是这样,那么一个规范如何为这个SQL环境重新制定这样一个条件?我是否需要比较case when TERM then 1 else 0 end
之类的内容?
答案 0 :(得分:1)
如果内存对我有用,你就不能将赋值操作评估为布尔值(例如你在C中的方式),所以我认为你必须这样做:
((@filter1) = (case when T.ID = '123' then 1 end)) and
((@filter2 <> 0) or (T.FK is null))
答案 1 :(得分:0)
这应该有用。
(((@filter1 <> 0) AND (T.ID = '123')) OR ((@Filter1 = 0) AND (t.ID <> '123'))) and
((@filter2 <> 0) or (T.FK is null))