如果我尝试在SQL Server 2005中运行此查询:
SELECT 1 WHERE NOT ( 0 )
我收到此错误:
Msg 4145,Level 15,State 1,Line 1 An 表达非布尔类型 在上下文中指定的 条件是预期的,接近')'。
有时在调试复杂的WHERE语句时,我会通过插入类似1=1
的内容来删除片段并测试特定场景。我更愿意使用1
或TRUE
但这在上述情况下不起作用。为什么它无法将NOT( 0 )
评估为布尔表达式?
编辑:这确实工作正常,表明我不必添加列:
SELECT 1 WHERE NOT(1<>1)
答案 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到什么。