SQL 服务器并设置 ANSI_NULLS 开启,设置 QUOTED_IDENTIFIER 开启

SQL SERVER and SET ANSI_NULLS ON, SET QUOTED_IDENTIFIER ON

所以我在创建脚本的时候一直在盲目地使用ansi_nulls on,quoted_identifier on,因为sqlserver在编写脚本对象的时候会自动生成它们..

我真的没有时间关心这些琐碎的废话:-)但我想这些问题必须要问。

鉴于这些是推荐的设置,是否有一个选项可以设置为 (a) 每个数据库,和 (b) 每个服务器,以便它们在默认情况下始终打开,而不是通过单独的脚本?

如果可以,如何/在哪里可以查看当前的默认设置?

两者都是在连接级别设置的,而不是数据库。如果您没有在脚本中指定它们,它们将使用默认连接设置。您可以通过在 SSMS 中右键单击您的服务器并选择属性来查看这些。转到“连接”窗格,有一个 ANSI NULL default On/Off 的复选框。如果两者都未选择,则 "default default" 为 ON。

您也可以使用 @@OPTIONS:

获取设置
SELECT CASE @@OPTIONS & 1024 WHEN 0 THEN 'OFF' ELSE 'ON' END AS SET_ANSI_NULLS_ON,
       CASE @@OPTIONS & 2048 WHEN 0 THEN 'OFF' ELSE 'ON' END AS SET_ANSI_NULLS_OFF;

可以在此处找到按位值的完整列表:Configure the user options Server Configuration Option

您可以使用以下方法默认为连接打开 ANSI NULL:

EXEC sys.sp_configure N'user options', N'1024';
GO
RECONFIGURE;

现代 SQL 服务器客户端 API 默认设置 ANSI_NULLS ONQUOTED_IDENTIFIER ON。因此这些选项将默认启用并优先于数据库 SET 选项设置,您不需要在 DDL 脚本中包含 SET 语句。

然而,一旦发现 SQLCMD 实用程序,它会出于向后兼容性的原因设置 QUOTED_IDENTIFIER OFF。需要使用 -I 参数调用 SQLCMD 来设置 QUOTED_IDENTIFIER ON.

当您希望使用 SQL Server Management Studio(SSMS) 2015 Express 创建新 SP 时,它会生成一个类似于以下片段的模板,其中包含语句 'SET ANSI_NULLS ON''SET QUOTED_IDENTIFIER ON' ,'SET NOCOUNT ON' 默认:

1。设置 ANSI_NULLS 开启:

当 ANSI_NULLS 为 ON 时,使用 WHERE column_name = NULL returns 零行的 SELECT 语句,即使 column_name.According 中存在空值ANSI(美国国家标准协会) 任何与 NULL 进行的比较或计算都是 NULL。 NULL 既不是字符串也不是数字,zero.It 也只是 NOT DEFINED。所以,当我做 SET ANSI_NULLS ON 时;我只是告诉 SQL SERVER 遵循 ANSI 标准。

当ANSI_NULLS设置为ON时。 ‘=’运算符无法识别 NULL。这是 ANSI 的标准,任何与 NULL 的比较总是 NULL。所以你永远不会为此得到结果。要在列中查找 NULL,我们使用关键字 ‘IS NULL’.

2。设置 QUOTED_IDENTIFIER 开启:

简而言之,当您执行SET QUOTED_IDENTIFIER ON时,您可以使用SQL标识符或SQL中的保留关键字作为用户定义对象。它 必须 在双引号内定义,因此名称为 QUOTED_IDENTIFIER.

考虑一种情况,您希望列名称为“Identity”。但是身份是 SQL 服务器的关键字。它将如何区分用户引用的身份或 T-SQL 引用 Identity.This 是引用标识符派上用场的地方。

当 SET QUOTED_IDENTIFIER 为 ON(默认)时,所有由双引号分隔的字符串都被解释为对象标识符。因此,带引号的标识符不必遵循标识符的 Transact-SQL 规则。它们可以是保留关键字,可以包含 Transact-SQL 标识符中通常不允许使用的字符。

参考资料请参考: