IsNull()未返回所有值

时间:2014-09-26 03:04:58

标签: sql sql-server-2008

让我说我有这张桌子

TABLE (Name varchar, Value varchar, Active bit)

和数据

'Name1', '1', NULL
'Name2', '1', NULL
'Name3', '1', 1
'Name4', '1', NULL
'Name3', '2', NULL

这个脚本我试图运行,但它只返回1行。

Select Name,Value FROM Table WHERE Active = IsNull(1,Active) 

不应该返回表格中的所有NULL1行吗?为什么这不能按预期工作?

2 个答案:

答案 0 :(得分:3)

应该是:

WHERE Active IS NULL OR Active = 1

ISNULL()函数用于将NULL值替换为您想要的值。

表达式ISNULL(1, Active)将始终返回1,因为1不为空。关于ISNULL()

的文档
  

用指定的替换值替换NULL。
  语法
   ISNULL(check_expression,replacement_value)

所以我认为这是你要构建的表达式:

WHERE ISNULL(Active, 1) = 1

答案 1 :(得分:1)

如果第一个参数为NULL,则ISNULL将使用第二个参数 这里第一个参数是1,它不是NULL,所以它的计算结果为1 因此,只有值为1的行才会匹配