SQL SERVER 和 SET ANSI_NULLS ON,SET QUOTED_IDENTIFIER ON

标签 sql sql-server ddl sql-scripts

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

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

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

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

最佳答案

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

Stored-Procedure-Template-SSMS2015 <强>1。开启 ANSI_NULLS:

当 ANSI_NULLS 为 ON 时,使用 WHERE column_name = NULL 的 SELECT 语句返回零行,即使 column_name 中有空值也是如此。根据 ANSI(美国国家标准协会) 执行的任何比较或计算与 NULL 是 NULL。 NULL 既不是字符串也不是数字也不是零。它只是未定义。所以,当我执行 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”。但是 Identity 是 SQL Server 的关键字。它将如何区分用户引用的身份或 T-SQL 引用的身份。这就是引用标识符派上用场的地方。

QUOTED_IDENTIFIER

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

引用资料请引用:

关于SQL SERVER 和 SET ANSI_NULLS ON,SET QUOTED_IDENTIFIER ON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765112/

相关文章:

sql - CREATE VIEW 必须是批处理中唯一的语句

ddl - 关于 DELETE CASCADE 在雪花中不起作用

sql - Where语句中的嵌套循环杀死性能

mysql - 如何对值为 X 的列执行计数

php sql 在选中复选框时获取查询

c# - 如何根据父级的当前 ID 将我的嵌套中继器绑定(bind)到其父级?

sql - is not null 和 < >' ' 之间有什么区别

sql - Order By 条款似乎不起作用

java - 来自 apache 的 DDLUtils 的替代品

sql - MySQL 查询 : find any record with a PENDING status and find any records with a FAILED status