1和0在T-SQL中不被识别为布尔常量

时间:2010-03-10 17:44:40

标签: tsql

如果我尝试在SQL Server 2005中运行此查询:

SELECT 1 WHERE NOT ( 0 )

我收到此错误:

  

Msg 4145,Level 15,State 1,Line 1 An   表达非布尔类型   在上下文中指定的   条件是预期的,接近')'。

有时在调试复杂的WHERE语句时,我会通过插入类似1=1的内容来删除片段并测试特定场景。我更愿意使用1TRUE但这在上述情况下不起作用。为什么它无法将NOT( 0 )评估为布尔表达式?

编辑:这确实工作正常,表明我不必添加列:

SELECT 1 WHERE NOT(1<>1)

4 个答案:

答案 0 :(得分:5)

0和1是整数。它们本身不是布尔表达式,在SQL中,只有表达式的值可以为TRUE,FALSE或UNKNOWN。例如,说“NOT 7.5”本身并不是一个布尔表达式。实际上,你想说的是“NOT(7.5&lt; 0&gt; 0)”因此,在你的例子中,你需要将你的值转换为表达式:

Select 1 Where Not ( 0 <> 0 )

至少在T-SQL中,没有可用于TRUE和FALSE的常量。即,没有办法查询:

Select 1 Where Not TRUE

答案 1 :(得分:1)

0和1不是布尔常量,它们是bit constants

答案 2 :(得分:0)

因为WHERE子句与SELECT子句

是分开的

您可以在SELECT中选择完全不同的东西,甚至不在WHERE子句中

例如

select name, address, state, company, country
from bla
where occupation='programmer'
and hobby ='debugging'

所以如果不是(0)意味着在这种情况下,你需要添加列

AND RegionID <> 0

AND RegionID NOT IN (0) --althoug if you have NULLS in coumn this won't work

答案 3 :(得分:0)

SELECT 1 WHERE NOT ( 0 ) 

在where clasue你必须进行比较,其中what = what,where what&lt;&gt;什么等等。你不能只与一个值进行比较。它需要知道你想要比较0到什么。