SQL存储过程中 SET ANSI_NULLS ON 和 SET QUOTED_IDENTIFIER ON的作用和详解

今天在写SQL Server存储过程中遇到的,做个整理归纳

USE [ABInbevDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

实际上,我们在创建存储过程的时候,这几行的代码是会自动创建出来的,那么先解释下两个标准的概念。

两个标准

当我们在编写存储过程时,存在两种标准可供选择:ANSI_NULLS 和 QUOTED_IDENTIFIER。下面我会对这两个标准进行详细说明:

  1. ANSI_NULLS(ANSI 空值处理规则):

    • SET ANSI_NULLS ON:启用 ANSI 空值处理规则。在比较和操作 NULL 值时,使用 ANSI 标准。它要求任何包含 NULL 值的比较都返回未知(UNKNOWN)结果。
    • 比较 NULL 值:当使用 = 或 <> 等比较运算符与 NULL 值进行比较时,结果将返回未知(UNKNOWN),而不是 TRUE 或 FALSE。这是 ANSI 标准的要求。
    • 操作 NULL 值:在执行某些操作时,如连接、聚合函数等,涉及到 NULL 值的行为也符合 ANSI 标准。例如,在连接操作中,如果有一个或多个 NULL 值,连接将不返回任何匹配。
  2. QUOTED_IDENTIFIER(引号标识符):

    • SET QUOTED_IDENTIFIER ON:启用引号标识符。在引用对象名称时,使用双引号作为标识符的限定符。
    • 引号标识符:引号标识符是用于引用包含特殊字符或保留字的对象名称的方法。在 SQL Server 中,通常使用双引号 (“”) 将标识符括起来。
    • 特殊字符和保留字:有些对象名称可能包含特殊字符,如空格或减号。在这种情况下,使用引号标识符是必须的,以区分标识符与字符本身的含义。此外,某些词可能是 SQL 的保留字,如果要使用它们作为对象名称,也需要使用引号标识符。

作用

这两个设置的默认状态在大多数情况下都是启用的(即 ON)。因此,在大多数情况下,不需要在存储过程中显式设置这些选项,除非你的数据库或服务器级别设置已更改。按照最佳实践,建议始终使用这两个设置,以确保代码在不同环境中的一致性和可移植性

你可能感兴趣的:(数据库,sql,数据库,sqlserver)