SET ANSI_NULLS ON 到底起什么作用?

作者:vkvi 来源:ITPOW(原创) 日期:2020-10-27

在 SQL Server 导出表的 SQL 语句时,会加上一句 SET ANSI_NULLS ON

这句我们在实际使用过程中,似乎保留与否、删除与否,都没有什么影响,那 SET ANSI_NULLS ON 到底起什么作用呢?

结论:SET ANSI_NULLS ON 表示不要用 = null 来判断是否是 null。默认为 ON

declare @s nvarchar(20)
if @s = null
	print '用 = 判断 null 成功'
else
	print '用 = 判断 null 失败'

如上执行的是 else,也就是说默认不能用等号判断 null。我们看看 SET ANSI_NULLS ON 的情况:

SET ANSI_NULLS ON
declare @s nvarchar(20)
if @s = null
	print '用 = 判断 null 成功'
else
	print '用 = 判断 null 失败'

也是执行的 else,说明默认就是 ON。那我们看看关闭的情况吧:

SET ANSI_NULLS OFF
declare @s nvarchar(20)
if @s = null
	print '用 = 判断 null 成功'
else
	print '用 = 判断 null 失败'

这回是“成功”,说明:

  • 默认ON 是不能用等号判断 null。

  • OFF 是可以用等号判断 null。

设置值影响当前会话,我们可以测试:

查询窗口 A 中无论怎么改变 ANSI_NULLS,都不影响查询窗口 B。

查询窗口 A 中改变 ANSI_NULLS 为非默认值,将其删除,再执行查询窗口 A 中其他代码,其设置仍然有效。

相关文章