代码之家  ›  专栏  ›  技术社区  ›  joedotnot

SQL SERVER并将ANSI_NULL设置为ON,将QUOTED_标识符设置为ON

  •  0
  • joedotnot  · 技术社区  · 7 年前

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

    我真的没有时间去关心这些琐碎的无意义的事情:-),但我想这些问题是必须要问的。

    考虑到这些都是推荐的设置,是否有一个选项可以(a)针对每个数据库和(b)针对每个服务器进行设置,以便它们在默认情况下始终处于启用状态,而不是针对单个脚本?

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

    0 回复  |  直到 7 年前
        1
  •  3
  •   Thom A    7 年前

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

    您还可以使用 @@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;
    
        2
  •  1
  •   Dan Guzman    7 年前

    现代SQL Server客户端API同时设置了 ANSI_NULLS ON 和 QUOTED_IDENTIFIER ON 默认情况下。因此,默认情况下,这些选项将处于打开状态,并优先于数据库 SET 选项设置,不需要在DDL脚本中包含SET语句。

    然而,一旦抓到了你,你就是 SQLCMD 实用程序,设置 QUOTED_IDENTIFIER OFF 因为向后兼容的原因。需要调用 SQLCMD 和 -I 要设置的参数 引用了上的_标识符 .

        3
  •  1
  •   Tahir77667    6 年前

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

    Stored-Procedure-Template-SSMS2015 1.将ANSI_空值设置为:

    启用ANSI_NULLS时,使用WHERE column_name=NULL的SELECT语句即使column_name中有空值,也会返回零行。根据 ANSI(美国国家标准协会) 使用NULL进行的任何比较或计算均为NULL。 无效的 既不是字符串,也不是数字,也不是零。这很简单 未定义 .所以,当我 SET ANSI_NULLS ON ; 我只是告诉SQL SERVER遵循ANSI标准。

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

    2.在以下位置设置带引号的\u标识符:

    简单地说,当你 SET QUOTED_IDENTIFIER ON 您可以使用SQL标识符或SQL中的保留关键字作为用户定义的对象。信息技术 必须 定义为双引号&因此得名 带引号的标识符 .

    考虑一种情况,您希望自己的列名是“Identity”。但身份是SQL Server的一个关键词。它将如何区分用户引用的标识或T-SQL引用的标识。这就是引用Idenfiers的地方。

    QUOTED_IDENTIFIER

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

    参考资料请参考: