所以我在创建脚本时一直盲目地使用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'
默认情况下:
1. SET ANSI_NULLS ON:
当 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,我们使用关键字'一片空白'.
2. 将 QUOTED_IDENTIFIER 设置为 ON:
简而言之,当你这样做时SET QUOTED_IDENTIFIER ON
您可以使用 SQL 标识符或 SQL 中的保留关键字作为用户定义的对象。它must在双引号内定义,因此得名QUOTED_IDENTIFIER.
考虑一种情况,您希望列名称为“Identity”。但 Identity 是 SQL Server 的关键字。它将如何区分用户引用的 Identitiy 或 T-SQL 引用的 Identity。这就是引用标识符派上用场的地方。
当 SET QUOTED_IDENTIFIER 为 ON(默认)时,所有用双引号分隔的字符串都被解释为对象标识符。因此,带引号的标识符不必遵循 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。
如需参考,请参阅:
- 设置 ANSI_NULLS、NOCOUNT 和 QUOTED_IDENTIFIER。 https://www.sqlservercentral.com/blogs/set-ansi_nulls-nocount-and-quoted_identifier
- SET 语句 (Transact-SQL) https://learn.microsoft.com/en-us/sql/t-sql/statements/set-statements-transact-sql?view=sql-server-ver15
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)