Sys.Databases ANSI 设置

Sys.Databases ANSI Settings

使用 SQL 服务器中的 ANSI 设置通常是在逐个连接的基础上处理的,有谁知道 sys.databases 中的 ANSI 设置有什么用?

您仍然可以在数据库级别设置这些设置:

USE master;
GO

CREATE DATABASE ANSI_NULLS_ON;
GO
ALTER DATABASE ANSI_NULLS_ON SET ANSI_NULLS ON;
GO
CREATE DATABASE ANSI_NULLS_OFF;
GO
ALTER DATABASE ANSI_NULLS_OFF SET ANSI_NULLS OFF;
GO
SELECT is_ansi_nulls_on
FROM sys.databases
WHERE [name] IN (N'ANSI_NULLS_ON',N'ANSI_NULLS_OFF');
GO

但是,连接's/server 的设置似乎确实覆盖了数据库设置,如下所示 returns 0 两者:

USE ANSI_NULLS_ON;
GO
SELECT CASE WHEN NULL = NULL THEN 1 ELSE 0 END AS ANSI_NULLS_ON;
GO
USE ANSI_NULLS_OFF;
GO
SELECT CASE WHEN NULL = NULL THEN 1 ELSE 0 END AS ANSI_NULLS_ON;
GO

但是,如果您使用的是包含数据库,那么这可能会有所不同(目前尚未测试)。

仅当API或会话未指定设置时才使用数据库设置。现代驱动程序,如 SqlClient、ODBC、OLE DB 等,默认情况下会自动将这些选项设置为 ON,尽管以后可以根据需要切换它们。旧版 APIs(例如 DB-LIB)根本不指定设置,因此在这种情况下使用数据库 ON 设置。