Sql column=null不工作

Sql column=null不工作,sql,sql-server,Sql,Sql Server,我发出了一个询问 SELECT * FROM tblEmp WHERE emp_id = 9737 AND mgr_id = NULL 它不会返回任何值。直到昨天它还在这样做。可能会改变什么?我们很多人在同一台服务器上工作,所以有可能有人改变了某些事情 为了得到结果,我必须开火 SELECT * FROM tblEmp WHERE emp_id = 9737 AND mgr_id IS NULL 这是给适当的输出 由于我在.Net中使用此查询,我担心当设置重置为上一个设置时,它是否会中断

我发出了一个询问

SELECT * FROM tblEmp WHERE emp_id = 9737  AND mgr_id = NULL
它不会返回任何值。直到昨天它还在这样做。可能会改变什么?我们很多人在同一台服务器上工作,所以有可能有人改变了某些事情

为了得到结果,我必须开火

SELECT * FROM tblEmp WHERE emp_id = 9737  AND mgr_id IS NULL
这是给适当的输出

由于我在
.Net
中使用此查询,我担心当设置重置为上一个设置时,它是否会中断。会吗?

将SQL Server的功能设置为
OFF
将允许您写入
mgr\u id=NULL
,并将其计算为TRUE

然而,用这种方式比较空值是不好的做法。大多数RDBMS不允许这样做,大多数DBA也不会这样写查询,而且
ANSI_NULLS
设置已经有一段时间被弃用了,将来将被迫
打开

将SQL Server的功能设置为
关闭
将允许您编写
mgr\u id=NULL
并将其评估为TRUE


然而,用这种方式比较空值是不好的做法。大多数RDBMS不允许这样做,大多数DBA也不会这样写查询,
ANSI_NULLS
设置已经被弃用了很长一段时间,将来将强制启用

Null不是一个值,因此不能使用
=
运算符。您应该使用
is null
函数使其工作。

null不是一个值,因此您不能使用
=
运算符。您应该使用
is null
函数使其工作。

AFAIK您的原始查询不应该返回任何内容。这是因为使用equals将某物与
NULL
进行比较总是
NULL
。而且
emp_id=9737和NULL也未知。吸取的教训是,在与
NULL
进行比较时,使用
为NULL
不为NULL
。请注意,原始查询不应返回任何内容。这是因为使用equals将某物与
NULL
进行比较总是
NULL
。而且
emp_id=9737和NULL也未知。经验教训:与
NULL
相比,使用
为NULL
不为NULL
。很好的解释+1。。。唯一一个解释任何结果是如何产生的感谢描述性的答案。但是如果ansi_nulls再次设置为off会怎么样呢。
mgr\u id是否为null
是否也会起作用?@Imad ANSI\u NULLS设置将默认为数据库中的任何设置。您可以使用修改默认设置以将其默认为关闭。您可以使用按用户配置它。否则,您将需要发出
SET ANSI_NULLS OFF每个会话,例如,
ExecuteNonQuery()@Imad要非常清楚,我从来没有设置过这个设置,所以我不能100%确定您需要设置什么来强制关闭所有连接。数据库提供程序完全可以手动设置该值。就我所知,没有办法阻止连接启用它。很好的解释+1。。。唯一一个解释任何结果是如何产生的感谢描述性的答案。但是如果ansi_nulls再次设置为off会怎么样呢。
mgr\u id是否为null
是否也会起作用?@Imad ANSI\u NULLS设置将默认为数据库中的任何设置。您可以使用修改默认设置以将其默认为关闭。您可以使用按用户配置它。否则,您将需要发出
SET ANSI_NULLS OFF每个会话,例如,
ExecuteNonQuery()@Imad要非常清楚,我从来没有设置过这个设置,所以我不能100%确定您需要设置什么来强制关闭所有连接。数据库提供程序完全可以手动设置该值。就我所知,没有办法阻止连接启用它。