适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统(PDW)
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 and Parallel Data Warehouse
SET ANSI_NULL_DFLT_OFF OFF
备注
该设置仅影响当列的可空性未在 CREATE TABLE and ALTER TABLE 语句中指定时,新列的可空性。 默认情况下,当 SETSET ANSI_NULL_DFLT_OFF 是 ON,使用和CREATE TABLE语句创建ALTER TABLE的新列如果未明确指定该列的空可空状态,则该列不为 NULL。 SET ANSI_NULL_DFLT_OFF 不影响通过显式 NULL 或非 NULL 创建的列。
SET SET ANSI_NULL_DFLT_ON SET SET ANSI_NULL_DFLT_OFF两个和不能同时开启。 如果将一个选项设置为 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 在不同空可空性设置的数据库中使用脚本,最好始终在和ALTER TABLE语句中指定NULL或NOT NULLCREATE 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;
另请参阅
ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
SET 语句(Transact-SQL)
SET ANSI_NULL_DFLT_ON (Transact-SQL)