在SQL中比较布尔子表达式是否相等(Microsoft SQL Server 2012)

时间:2014-10-30 13:35:53

标签: sql sql-server tsql

我正在尝试将以下逻辑表达式用作Microsoft SQL Server 2012存储过程的一部分,其中@filter1@filter2的类型为bit(即布尔值)。

((@filter1 <> 0) = (T.ID = '123')) and
((@filter2 <> 0) or (T.FK is null))

我在第一个=收到语法错误。显然,布尔项的结果可以使用ANDOR进行组合,但不能检查与其他此类术语的相等性。

确实如此,如果是这样,那么一个规范如何为这个SQL环境重新制定这样一个条件?我是否需要比较case when TERM then 1 else 0 end之类的内容?

2 个答案:

答案 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))