SQL SERVER和SET ANSI_NULLS ON,SET QUOTED_IDENTIFIER ON

问题描述 投票:0回答:2

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

我真的没有时间关注这种微不足道的无意义:-)但我想问题必须要问。

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

如果是这样,可以查看当前默认设置的方式/位置?

sql sql-server ddl sql-scripts
2个回答
0
投票

两者都设置在连接级别,而不是数据库。如果未在脚本中指定它们,则它们将使用默认连接设置。您可以通过右键单击SSMS中的服务器并选择Properies来查看这些内容。转到Connections窗格,有一个ANSI NULL默认开/关复选框。如果两者均未选中,则“默认默认值”为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;

0
投票

现代SQL Server客户端API默认设置ANSI_NULLS ONQUOTED_IDENTIFIER ON。因此,默认情况下选项将处于启用状态,并且优先于数据库SET选项设置,您不需要在DDL脚本中包含SET语句。

然而,一旦gotcha是SQLCMD实用程序,由于向后兼容性原因设置QUOTED_IDENTIFIER OFF。需要用SQLCMD参数调用-I来设置QUOTED_IDENTIFIER ON

© www.soinside.com 2019 - 2024. All rights reserved.