适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Microsoft Fabric中的SQL分析端点
Microsoft Fabric中的仓库
Microsoft Fabric中的SQL数据库
数据库的 ANSI null default 选项为 true 时,更改会话行为以覆盖新列的默认为 Null 性。 关于设置ANSI空默认值的更多信息,请参见 ALTER DATABASE (Transact-SQL)。
语法
-- Syntax for SQL Server and Azure SQL Database and Microsoft Fabric
SET ANSI_NULL_DFLT_OFF { ON | OFF }
-- Syntax for Azure Synapse Analytics
SET ANSI_NULL_DFLT_OFF OFF
备注
该设置仅影响当列的可空性未在 CREATE TABLE and ALTER TABLE 语句中指定时,新列的可空性。 默认情况下,当 SETSET ANSI_NULL_DFLT_OFF 是 ON,使用和ALTER TABLE语句创建CREATE TABLE的新列如果未明确指定该列的空可空状态,则该列不为 NULL。 SET ANSI_NULL_DFLT_OFF 不影响通过显式 NULL 或非 NULL 创建的列。
SET SET ANSI_NULL_DFLT_OFF SET SET ANSI_NULL_DFLT_ON两个和不能同时开启。 如果将一个选项设置为 ON,则将另一个选项设置为 OFF。 因此,任一 ANSI_NULL_DFLT_OFF 或 SETSET ANSI_NULL_DFLT_ON 都可以设置为开启,或者两者都可以设置为关闭。 如果任一选项开启,该设置SETSET ANSI_NULL_DFLT_OFF (或 SETSET ANSI_NULL_DFLT_ON)生效。 如果将这两个选项都设置为 OFF,则 SQL Server 将使用 sys.databases 目录视图中 is_ansi_null_default_on 列的值。
为了更可靠的操作,Transact-SQL 在不同空可空性设置的数据库中使用脚本,最好始终在和CREATE TABLE语句中指定NULL或NOT NULLALTER TABLE。
SET ANSI_NULL_DFLT_OFF设置是在执行或运行时设置的,而不是在分析时设置的。
要查看此设置的当前设置,请运行以下查询。
DECLARE @ANSI_NULL_DFLT_OFF VARCHAR(3) = 'OFF';
IF ( (2048 & @@OPTIONS) = 2048 ) SET @ANSI_NULL_DFLT_OFF = 'ON';
SELECT @ANSI_NULL_DFLT_OFF AS ANSI_NULL_DFLT_OFF;
权限
要求具有 public 角色的成员身份。
示例
以下示例显示当 ANSI null default 数据库选项在两种设置下时,对 SET ANSI_NULL_DFLT_OFF 的影响。
USE AdventureWorks2022;
GO
-- Set the 'ANSI null default' database option to true by executing
-- ALTER DATABASE.
GO
ALTER DATABASE AdventureWorks2022 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 AdventureWorks2022 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, t2, t3, t4, t5, t6;