SET ANSI_NULL_DFLT_ON (Transact-SQL)
当数据库的 ANSI null default 选项为 false 时,修改会话的行为以覆盖新列的默认为空性。 有关设置 ANSI null default 的值的详细信息,请参阅 ALTER DATABASE (Transact-SQL)。
适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。 |
语法
SET ANSI_NULL_DFLT_ON {ON | OFF}
注释
仅当在 CREATE TABLE 和 ALTER TABLE 语句中没有指定列的为空性时,该设置才能影响新列的为空性。 SET ANSI_NULL_DFLT_ON 为 ON 时,如果没有显式指定列的为空性状态,则使用 ALTER TABLE 和 CREATE TABLE 语句创建的新列可以使用空值。 SET ANSI_NULL_DFLT_ON 对使用显式 NULL 或 NOT NULL 创建的列无效。
不能同时将 SET ANSI_NULL_DFLT_OFF 和 SET ANSI_NULL_DFLT_ON 设置为 ON。 如果将一个选项设置为 ON,则将另一个选项设置为 OFF。 因此,可以将 ANSI_NULL_DFLT_OFF 或 ANSI_NULL_DFLT_ON 设置为 ON,或者将二者都设置为 OFF。 如果有一个选项为 ON,则该设置(SET ANSI_NULL_DFLT_OFF 或 SET ANSI_NULL_DFLT_ON)生效。 如果将这两个选项都设置为 OFF,则 SQL Server 将使用 sys.databases 目录视图中 is_ansi_null_default_on 列的值。
为使 Transact-SQL 脚本在含有不同为空性设置的数据库中获得更可靠的操作,最好始终在 CREATE TABLE 和 ALTER TABLE 语句中指定 NULL 或 NOT NULL。
进行连接时,SQL Server 的 SQL Server Native Client ODBC 驱动程序和 SQL Server Native Client OLE DB 访问接口会自动将 ANSI_NULL_DFLT_ON 设置为 ON。 对于来自 DB-Library 应用程序的连接,SET ANSI_NULL_DFLT_ON 的默认设置为 OFF。
SET ANSI_DEFAULTS 为 ON 时,将启用 SET ANSI_NULL_DFLT_ON。
SET ANSI_NULL_DFLT_ON 的设置是在执行或运行时设置的,而不是在分析时设置的。
在使用 SELECT INTO 语句创建表时,SET ANSI_NULL_DFLT_ON 的设置不适用。
要查看此设置的当前设置,请运行以下查询。
DECLARE @ANSI_NULL_DFLT_ON VARCHAR(3) = 'OFF';
IF ( (1024 & @@OPTIONS) = 1024 ) SET @ANSI_NULL_DFLT_ON = 'ON';
SELECT @ANSI_NULL_DFLT_ON AS ANSI_NULL_DFLT_ON;
权限
要求具有 public 角色成员资格。
示例
以下示例显示当 ANSI null default 数据库选项在两种设置下时,对 SET ANSI_NULL_DFLT_ON 的影响。
USE AdventureWorks2012;
GO
-- The code from this point on demonstrates that SET ANSI_NULL_DFLT_ON
-- has an effect when the 'ANSI null default' for the database is false.
-- Set the 'ANSI null default' database option to false by executing
-- ALTER DATABASE.
ALTER DATABASE AdventureWorks2012 SET ANSI_NULL_DEFAULT OFF;
GO
-- Create table t1.
CREATE TABLE t1 (a TINYINT) ;
GO
-- NULL INSERT should fail.
INSERT INTO t1 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to ON and create table t2.
SET ANSI_NULL_DFLT_ON ON;
GO
CREATE TABLE t2 (a TINYINT);
GO
-- NULL insert should succeed.
INSERT INTO t2 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to OFF and create table t3.
SET ANSI_NULL_DFLT_ON OFF;
GO
CREATE TABLE t3 (a TINYINT);
GO
-- NULL insert should fail.
INSERT INTO t3 (a) VALUES (NULL);
GO
-- The code from this point on demonstrates that SET ANSI_NULL_DFLT_ON
-- has no effect when the 'ANSI null default' for the database is true.
-- Set the 'ANSI null default' database option to true.
ALTER DATABASE AdventureWorks2012 SET ANSI_NULL_DEFAULT ON
GO
-- Create table t4.
CREATE TABLE t4 (a TINYINT);
GO
-- NULL INSERT should succeed.
INSERT INTO t4 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to ON and create table t5.
SET ANSI_NULL_DFLT_ON ON;
GO
CREATE TABLE t5 (a TINYINT);
GO
-- NULL INSERT should succeed.
INSERT INTO t5 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to OFF and create table t6.
SET ANSI_NULL_DFLT_ON OFF;
GO
CREATE TABLE t6 (a TINYINT);
GO
-- NULL INSERT should succeed.
INSERT INTO t6 (a) VALUES (NULL);
GO
-- Set the 'ANSI null default' database option to false.
ALTER DATABASE AdventureWorks2012 SET ANSI_NULL_DEFAULT ON;
GO
-- Drop tables t1 through t6.
DROP TABLE t1,t2,t3,t4,t5,t6;