如何让SQL识别WHERE column = NULL?

时间:2011-06-29 20:18:08

标签: sql sql-server tsql

在Microsoft SQL中,我有以下声明(粗略地):

UPDATE sometable 
   SET somecolumn = @somevalue 
 WHERE somecolumn = NULL;
先前在脚本中设置了

@somevalue

运行正常,SQL告诉我零行受影响。有五行是somecolumn是NULL。我做错了什么?

4 个答案:

答案 0 :(得分:17)

您必须使用IS NULL来测试列中的NULL值。

 UPDATE sometable SET somecolumn = @somevalue WHERE somecolumn IS NULL;

答案 1 :(得分:4)

尝试 IS NULL

UPDATE sometable 
   SET somecolumn = @somevalue 
 WHERE somecolumn IS NULL;

来源:http://blogs.msdn.com/b/sqlclr/archive/2005/06/21/431329.aspx

答案 2 :(得分:3)

乔是对的。没有什么可以EQUAL null。它只能为空,因此,UPDATE mytable SET mycolumn = @value WHERE anotherColumn IS NULL。

答案 3 :(得分:1)

ANSI SQL defines NULL不等于任何东西 - 甚至是另一个NULL实例。规范的方法是使用IS NULLIS NOT NULL

还有MS SQL Server选项SET ANSI_NULLS。关闭此选项会使WHERE x = NULL完全符合您的预期。但是,它还会在NULL之类的查询中包含任何WHERE x <> 'abc'值 - 这可能不是您所期望的。此选项是特定于连接的,因此更改连接不会影响其他选项。您还可以在数据库级别设置默认设置。创建存储过程时,将在创建时捕获该选项 - 而不是运行时。

另一个技巧是构建像WHERE ISNULL(x, '') = ISNULL(@x, '')这样的查询。我不认为这是SARGable,所以性能不如WHERE (x IS NULL AND @x IS NULL) OR (x = @x)好,但是编写和动态构建要好得多。

哦 - 而且,因为我们正在谈论ANSI SQL。 {1}}的ANSI SQL版本为ISNULL