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

Aar*_*nLS 2 t-sql

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

SELECT 1 WHERE NOT ( 0 )
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

消息4145,级别15,状态1,行1在预期条件的上下文中指定的非布尔类型的表达式,在')'附近.

有时在调试复杂的WHERE语句时,我会通过插入类似于1=1true的内容来剪切片段并测试特定场景.我宁愿只使用1TRUE但在上述情况下这不起作用.为什么它无法NOT( 0 )作为布尔表达式进行求值?

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

SELECT 1 WHERE NOT(1<>1)

Tho*_*mas 5

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)