SET ANSI_NULL_DFLT_OFF (Transact-SQL)

数据库的 ANSI null default 选项为 true 时,更改会话行为以覆盖新列的默认为空性。有关设置 ANSI NULL Default 的值的详细信息,请参阅 ALTER DATABASE (Transact-SQL)设置数据库选项

主题链接图标Transact-SQL 语法约定

语法

SET ANSI_NULL_DFLT_OFF { ON | OFF }

注释

仅当 CREATE TABLE 和 ALTER TABLE 语句中没有指定列的为空性,此设置才能影响新列的为空性。默认情况下,当 SET ANSI_NULL_DFLT_OFF 为 ON 时,如果没有显式指定列的为空性状态,则使用 ALTER TABLE 和 CREATE TABLE 语句创建的新列将为 NOT NULL。SET ANSI_NULL_DFLT_OFF 对使用显示 NULL 或 NOT NULL 创建的列无效。

不能同时将 SET ANSI_NULL_DFLT_OFF 和 SET ANSI_NULL_DFLT_ON 设置为 ON。如果将一个选项设置为 ON,则将另一个选项设置为 OFF。因此,可以将 ANSI_NULL_DFLT_OFF 或 SET 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。

SET ANSI_NULL_DFLT_OFF 的设置是在执行或运行时设置的,而不是在分析时设置的。

权限

要求具有 public 角色的成员身份。

示例

以下示例显示当 ANSI null default 数据库选项在两种设置下时,对 SET ANSI_NULL_DFLT_OFF 的影响。

USE AdventureWorks;
GO

-- Set the 'ANSI null default' database option to true by executing 
-- ALTER DATABASE.
GO
ALTER DATABASE AdventureWorks SET ANSI_NULL_DEFAULT ON;
GO
-- Create table t1.
CREATE TABLE t1 (a TINYINT);
GO
-- NULL INSERT should succeed.
INSERT INTO t1 (a) VALUES (NULL);
GO

-- SET ANSI_NULL_DFLT_OFF to ON and create table t2.
SET ANSI_NULL_DFLT_OFF ON;
GO
CREATE TABLE t2 (a TINYINT);
GO 
-- NULL INSERT should fail.
INSERT INTO t2 (a) VALUES (NULL);
GO

-- SET ANSI_NULL_DFLT_OFF to OFF and create table t3.
SET ANSI_NULL_DFLT_OFF OFF;
GO
CREATE TABLE t3 (a TINYINT) ;
GO 
-- NULL INSERT should succeed.
INSERT INTO t3 (a) VALUES (NULL);
GO

-- This illustrates the effect of having both the database
-- option and SET option disabled.
-- Set the 'ANSI null default' database option to false.
ALTER DATABASE AdventureWorks SET ANSI_NULL_DEFAULT OFF;
GO
-- Create table t4.
CREATE TABLE t4 (a tinyint) ;
GO 
-- NULL INSERT should fail.
INSERT INTO t4 (a) VALUES (null);
GO

-- SET ANSI_NULL_DFLT_OFF to ON and create table t5.
SET ANSI_NULL_DFLT_OFF ON;
GO
CREATE TABLE t5 (a tinyint);
GO 
-- NULL insert should fail.
INSERT INTO t5 (a) VALUES (null);
GO

-- SET ANSI_NULL_DFLT_OFF to OFF and create table t6.
SET ANSI_NULL_DFLT_OFF OFF;
GO
CREATE TABLE t6 (a tinyint); 
GO 
-- NULL insert should fail.
INSERT INTO t6 (a) VALUES (null);
GO

-- Drop tables t1 through t6.
DROP TABLE t1
DROP TABLE t2
DROP TABLE t3
DROP TABLE t4
DROP TABLE t5
DROP TABLE t6