在SQL Server中,如果 nullParam=NULL在where子句中,则其总值为false。这是违反直觉的,并导致了我很多错误。我确实了解IS NULL和IS NOT NULL关键字是正确的方法。但是,为什么SQL Server会以这种方式表现呢?
nullParam=NULL
IS NULL
IS NOT NULL
在这种情况下,请将null视为“未知”(或“不存在”)。在这两种情况下,您都不能说它们相等,因为您不知道它们的价值。因此,null = null的计算结果不为true(false或null,具体取决于您的系统),因为您不知道要说它们相等的值。此行为在ANSI SQL-92标准中定义。
编辑:这取决于您的ansi_nulls设置。如果您关闭ANSI_NULLS,则此值将为true。运行以下代码作为示例…
set ansi_nulls off if null = null print 'true' else print 'false' set ansi_nulls ON if null = null print 'true' else print 'false'