在 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 中其他代码,其设置仍然有效。