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

Tsql 1和0在T-SQL中未被识别为布尔常量,tsql,Tsql,如果我尝试在SQL Server 2005中运行此查询: SELECT 1 WHERE NOT ( 0 ) 我得到这个错误: Msg 4145,15级,状态1,第1行 非布尔型表达式 在上下文中指定,其中 应为条件,在“')”附近 有时,在调试复杂的WHERE语句时,我会切掉一些片段,并通过插入类似1=1的内容来测试特定的场景。我更愿意只使用1或TRUE,但在上述情况下不起作用。为什么它不能作为布尔表达式计算而不是(0) 编辑:这很好,表明我不必添加列: 选择1 WHERE NOT(11),因

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

SELECT 1 WHERE NOT ( 0 )
我得到这个错误:

Msg 4145,15级,状态1,第1行 非布尔型表达式 在上下文中指定,其中 应为条件,在“')”附近

有时,在调试复杂的WHERE语句时,我会切掉一些片段,并通过插入类似
1=1
的内容来测试特定的场景。我更愿意只使用
1
TRUE
,但在上述情况下不起作用。为什么它不能作为布尔表达式计算
而不是(0)

编辑:这很好,表明我不必添加列:


选择1 WHERE NOT(11)

,因为WHERE子句与SELECT子句是分开的

您可以在select中选择完全不同的内容,这些内容甚至不在WHERE子句中

比如说

select name, address, state, company, country
from bla
where occupation='programmer'
and hobby ='debugging'
因此,如果not(0)在本例中表示什么,则需要添加列

AND RegionID <> 0

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

Select 1 Where Not ( 0 <> 0 )

在where类中,必须进行比较,where what=what,where what what等。不能只对一个值进行比较。它需要知道您试图将0与什么进行比较。

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

我认识到我可以从where中选择不同的内容。我不关心选择方。我说的是产生错误的WHERE端的布尔表达式。这是一个没有列的布尔表达式。为什么我要加一个专栏?谢谢托马斯,你理解我的问题。所以我想没有布尔常数可以代替“00”?我从来没有这样的需要,但我见过人们使用“where1=1”和“where1=0”。这些给了你很好的布尔条件,没有双重和三重否定。@aaronls。至少在T-SQL中,没有。TRUE和FALSE没有常量。您只需接受任何布尔表达式都可以以TRUE、FALSE或UNKNOWN结尾。
Select 1
在SQL Server中工作。不需要
where
条件,这与错误无关。错误是指where条件。为了简单起见,我使用了
SELECT 1
Select 1 Where Not ( 0 <> 0 )
Select 1 Where Not TRUE
SELECT 1 WHERE NOT ( 0 )