SET ANSI_NULL_DFLT_ON (Transact-SQL)

적용 대상:SQL 서버Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric 의 SQL 분석 엔드포인트Microsoft Fabric 의 웨어하우스Microsoft Fabric의 SQL 데이터베이스

데이터베이스의 ANSI Null 기본값 옵션이 false로 설정되어 있으면 세션의 동작을 수정하여 새 열의 기본 Null 허용 여부보다 우선 적용됩니다. ANSI null default 값 설정에 대한 자세한 내용은 (Transact-SQL)를 참조하세요ALTER DATABASE.

Transact-SQL 구문 표기 규칙

구문

-- Syntax for SQL Server and Azure SQL Database and Microsoft Fabric

SET ANSI_NULL_DFLT_ON {ON | OFF}
-- Syntax for Azure Synapse Analytics

SET ANSI_NULL_DFLT_ON ON

설명

이 설정은 열 nullability가 and CREATE TABLE 문에 ALTER TABLE 명시되어 있지 않을 때만 새로운 열의 nullability에 영향을 미칩니다. ON일 때SETSET ANSI_NULL_DFLT_ON, and ALTER TABLE 문으로 CREATE TABLE 새로 생성되는 열은 열의 null 가능 상태가 명시적으로 지정되지 않은 경우 null 값을 허용합니다. SET ANSI_NULL_DFLT_ON 명시적인 NULL 또는 NOT NULL이 있는 열에는 영향을 미치지 않습니다.

두 가지 모두 SETSET ANSI_NULL_DFLT_OFFSETSET ANSI_NULL_DFLT_ON 동시에 켜질 수 없습니다. 둘 중 하나를 ON으로 설정하면 다른 옵션은 OFF로 설정됩니다. 따라서 둘 중 하나 ANSI_NULL_DFLT_OFF 또는 ANSI_NULL_DFLT_ON 모두 ON으로 설정할 수 있고, 둘 다 OFF로 설정할 수 있습니다. 두 옵션 중 하나가 켜져 있으면 그 설정(SETSET ANSI_NULL_DFLT_OFF 또는 SETSET ANSI_NULL_DFLT_ON)이 적용됩니다. 두 옵션을 모두 OFF로 설정하면 SQL Server는 sys.databases 카탈로그 뷰에 있는 is_ansi_null_default_on 열의 값을 사용합니다.

서로 다른 nullability 설정을 가진 데이터베이스에서 사용되는 Transact-SQL 스크립트의 보다 신뢰성 높은 연산을 위해서는 NULL CREATE TABLE 또는 NOT NULL ALTER TABLE 을 명시하는 것이 더 좋습니다.

연결할 때 SQL Server Native Client ODBC 드라이버 및 SQL Server Native Client OLE DB Provider for SQL Server가 자동으로 ON으로 설정 ANSI_NULL_DFLT_ON 됩니다. DB-Library 애플리케이션 연결에 대한 SET ANSI_NULL_DFLT_ON 기본값은 OFF입니다.

ON SETSET ANSI_DEFAULTS 인 경우 SETSET 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 역할의 멤버 자격이 필요합니다.

예제

다음 예에서는 SET ANSI_NULL_DFLT_ON 데이터베이스 옵션에 대해 을 두 가지 값으로 설정했을 때 결과를 보여줍니다.

USE AdventureWorks2022;  
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 AdventureWorks2022 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 AdventureWorks2022 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 AdventureWorks2022 SET ANSI_NULL_DEFAULT ON;  
GO  
  
-- Drop tables t1 through t6.  
DROP TABLE t1,t2,t3,t4,t5,t6;