Tsql 为什么在数据库级别关闭ansi_null时,它在新会话中处于打开状态?

Tsql 为什么在数据库级别关闭ansi_null时,它在新会话中处于打开状态?,tsql,null,sql-server-2008-r2,Tsql,Null,Sql Server 2008 R2,在数据库选项中,ANSI NULLS Enabled选项设置为false。我可以通过运行以下命令进一步确认这一点: SELECT DATABASEPROPERTYEX('mydb', 'IsAnsiNullsEnabled') SET ANSI_NULLS OFF 这给了我0 有趣的是,每当我从同一数据库打开新的查询窗口并运行以下命令时: IF (NULL = NULL) BEGIN print 'true' END ELSE begin PRINT 'false' END 它每次都给我“

在数据库选项中,ANSI NULLS Enabled选项设置为false。我可以通过运行以下命令进一步确认这一点:

SELECT DATABASEPROPERTYEX('mydb', 'IsAnsiNullsEnabled')
SET ANSI_NULLS OFF
这给了我0

有趣的是,每当我从同一数据库打开新的查询窗口并运行以下命令时:

IF (NULL = NULL)
BEGIN
print 'true'
END
ELSE
begin
PRINT 'false'
END
它每次都给我“假”。仅当我通过运行以下命令手动关闭ansi_nulls时,它才会给出“true”:

SELECT DATABASEPROPERTYEX('mydb', 'IsAnsiNullsEnabled')
SET ANSI_NULLS OFF

为什么会这样

如果您使用的是Management Studio(SSMS),则可以在默认查询选项中设置它

要检查此项,请单击“工具..选项”打开选项对话框。然后导航到“查询执行>SQL Server>ANSI”


数据库设置是默认设置,仅在未指定会话、查询或连接设置时使用。

谢谢Barry!就这样!