数据库选项:为什么默认情况下“SET ANSI_NULLS OFF”对于新数据库是OFF?

时间:2016-08-22 03:15:48

标签: sql-server

使用SSMS 2014:

当我使用SSMS创建新数据库时,新数据库有一些奇怪的默认设置

ALTER DATABASE [del] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [del] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [del] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [del] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [del] SET ARITHABORT OFF 

当我测试脚本和存储过程时,似乎ANSI_NULLS实际上是ON。

我很困惑为什么在创建数据库时像ANSI_NULLS这样重要的设置是关闭的?以及它在我的脚本中如何变为ON?

1 个答案:

答案 0 :(得分:3)

  

我的脚本中它是如何变为ON的?

使用SET语句设置的连接级别设置会覆盖ANSI_NULLS的默认数据库设置  默认情况下,ODBC和OLE DB客户端在连接到SQL Server实例时为会话发出连接级SET语句设置ANSI_NULLS为ON。

  

我很困惑为什么在创建数据库时像ANSI_NULLS这样重要的设置是关闭的?

我创建了两个空值都关闭和打开的数据库,但每次我尝试插入时,客户端驱动程序都会为我生成那些设置选项

以下是MSDN对此的评价。

  

在SQL Server的未来版本中,ANSI_NULLS将始终为ON,并且将选项显式设置为OFF的任何应用程序都将产生错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

最近,我可以想到为什么这个选项设置为ON,可能是由于相容性