T-SQL WHERE子句 - 将列与自身进行比较在空列上失败

时间:2010-11-12 09:54:41

标签: tsql null where-clause

我通常使用这样的结构将过滤器应用于列:

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为null,我可以在where子句中指定其值'enable',并指定NULL值为选择b = b的位置,对于每列都是如此, BUT 如果NULL列中有b值,则不会被选中。有没有一种标准的方法可以解决这个问题?那么即使b列具有空值,我应该在上面的示例查询中使用什么来选择所有行?

1 个答案:

答案 0 :(得分:2)

要检查NULL值,您需要将其作为b is null

进行检查

您可以将查询更改为 -

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