如果我尝试在SQL Server 2005中运行此查询:
SELECT 1 WHERE NOT ( 0 )
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
消息4145,级别15,状态1,行1在预期条件的上下文中指定的非布尔类型的表达式,在')'附近.
有时在调试复杂的WHERE语句时,我会通过插入类似于1=1true的内容来剪切片段并测试特定场景.我宁愿只使用1或TRUE但在上述情况下这不起作用.为什么它无法NOT( 0 )作为布尔表达式进行求值?
编辑:这确实工作正常,表明我不必添加列:
SELECT 1 WHERE NOT(1<>1)
0和1是整数.它们本身不是布尔表达式,在SQL中,只有表达式的值可以为TRUE,FALSE或UNKNOWN.例如,说"NOT 7.5"本身并不是一个布尔表达式.实际上,你想说的是"NOT(7.5 <> 0)"因此,在你的例子中,你需要将你的值转换为表达式:
Select 1 Where Not ( 0 <> 0 )
Run Code Online (Sandbox Code Playgroud)
至少在T-SQL中,没有可用于TRUE和FALSE的常量.即,没有办法查询:
Select 1 Where Not TRUE
Run Code Online (Sandbox Code Playgroud)