【问题标题】:NULL equality in SQL Server 2008 R2SQL Server 2008 R2 中的 NULL 相等性
【发布时间】:2014-12-16 07:11:40
【问题描述】:

我知道默认情况下 NULL = NULL 是不正确的,所以

if null = null select 1 else select 2

会给你2个

然后你可以通过

来改变这种行为
SET ANSI_NULLS OFF

结果为 1

我的问题是为什么将 ANSI_NULLS 设置为 OFF 后,下面的 SELECT 仍然没有返回任何内容?

select * from (select 'a', null) ta (c1, c2), (select 'b', null) tb (c1, c2)
where ta.c2 = tb.c2

【问题讨论】:

标签: sql-server sql-server-2008-r2


【解决方案1】:

我真的无法回答为什么会这样,但这种行为已记录在案。

来自SET ANSI_NULLS (Transact-SQL)

SET ANSI_NULLS ON 仅在以下操作数之一影响比较 比较要么是 NULL 变量,要么是文字 NULL。如果 比较的两边都是列或复合表达式, 设置不影响比较。

也是为了完整性。

在 SQL Server 的未来版本中,ANSI_NULLS 将始终为 ON,并且 将选项显式设置为 OFF 的任何应用程序都将生成 一个错误。避免在新的开发工作中使用此功能,并计划 修改当前使用此功能的应用程序。

【讨论】:

  • 谢谢。如果我要将您的答案与我遇到的行为联系起来,我将把“如果比较的两边都是列......设置不影响比较”作为 ANSI_NULLS 的意图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多