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

T-SQL WHERE子句-在空列上比较列本身失败

  •  0
  • Axarydax  · 技术社区  · 14 年前

    我通常使用这样的构造来对列应用筛选器:

    CREATE TABLE test(a int NOT NULL, b int NULL)
    --insert some data
    INSERT INTO test(a,b) values (1,1)
    INSERT INTO test(a,b) values (1,NULL)
    
    declare @a int
    declare @b int
    set @a = 1
    --@b is null at this time
    
    select * from test
      where a = @a
        and b = isnull(@b,b)
    

    这只选择第一行。

    例如,如果这是一个存储过程和参数 @b 为空,我可以指定其值以在 where NULL 选择b=b的值,对于每个列都是如此, 但是 无效的 价值 b 列,它不会被选中。有没有一个标准的方法来处理这个问题?所以在上面的示例查询中,我应该使用什么来选择所有行,即使 列有空值?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Sachin Shanbhag    14 年前

    对于检查空值,您需要将其作为 b is null

    您可以将查询更改为-

    select * from test
      where a = @a
        and b = isnull(@b,b)
        or (@b is null and b is null)