代码之家  ›  专栏  ›  技术社区  ›  AaronLS

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

  •  2
  • AaronLS  · 技术社区  · 15 年前

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

    SELECT 1 WHERE NOT ( 0 )
    

    我得到这个错误:

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

    有时,当调试复杂的where语句时,我将通过插入 1=1 是真的。我宁愿用 1 TRUE 但这在上面的情况下不起作用。为什么它不能评估 NOT( 0 ) 作为布尔表达式?

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

    SELECT 1 WHERE NOT(1<>1)

    4 回复  |  直到 15 年前
        1
  •  5
  •   Thomas    15 年前

    0和1是整数。它们本身不是布尔表达式,在sql中,只有表达式的值可以为true、false或unknown。例如说“not 7.5”本身并不是一个布尔表达式。实际上,您试图说的“不是(7.5<>0)”,因此,在您的示例中,您需要将值转换为表达式:

    Select 1 Where Not ( 0 <> 0 )
    

    至少在t-sql中,没有可以用于true和false的常量。也就是说,没有办法查询:

    Select 1 Where Not TRUE
    
        2
  •  1
  •   Jamie Ide    15 年前

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

        3
  •  0
  •   SQLMenace    15 年前

    因为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
    
        4
  •  0
  •   HLGEM    15 年前
    SELECT 1 WHERE NOT ( 0 ) 
    

    在where clause中,您必须进行比较,where what=what,where what<gt;what etc。您不能只与一个值进行比较。它需要知道您正在尝试将0与进行比较。