SET ANSI_NULL_DFLT_ON (Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics분석 플랫폼 시스템(PDW)Microsoft 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 and Parallel Data Warehouse

SET ANSI_NULL_DFLT_ON ON

설명

이 설정은 열 nullability가 and ALTER TABLE 문에 CREATE TABLE 명시되어 있지 않을 때만 새로운 열의 nullability에 영향을 미칩니다. ON일 때SETSET ANSI_NULL_DFLT_ON, and CREATE TABLE 문으로 ALTER 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 ALTER TABLE 또는 NOT NULL CREATE 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;  

참고 항목

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
SET 문 (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)
SET ANSI_NULL_DFLT_OFF (Transact-SQL)