SET ANSI_NULLS (Transact-SQL)SET ANSI_NULLS (Transact-SQL)

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database 예Azure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance 예Azure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics 예병렬 데이터 웨어하우스Parallel Data Warehouseyes병렬 데이터 웨어하우스Parallel Data Warehouse적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database 예Azure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance 예Azure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics 예병렬 데이터 웨어하우스Parallel Data Warehouseyes병렬 데이터 웨어하우스Parallel Data Warehouse

SQL Server 2019 (15.x)SQL Server 2019 (15.x)의 Null 값과 함께 사용될 경우 Equals(=)와 Not Equal To(<>) 비교 연산자의 ISO 호환 동작을 지정합니다.Specifies ISO compliant behavior of the Equals (=) and Not Equal To (<>) comparison operators when they are used with null values in SQL Server 2019 (15.x)SQL Server 2019 (15.x).

항목 링크 아이콘 Transact-SQL 구문 표기 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

-- Syntax for SQL Server

SET ANSI_NULLS { ON | OFF }
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse

SET ANSI_NULLS ON

참고

SQL Server 2014 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

설명Remarks

ANSI_NULLS 옵션이 ON인 경우, WHERE column_name = NULL을 사용하는 SELECT 문은 column_name에 null 값이 있어도 0행을 반환합니다.When ANSI_NULLS is ON, a SELECT statement that uses WHERE column_name = NULL returns zero rows even if there are null values in column_name. WHERE column_name <> NULL을 사용하는 SELECT 문은 column_name에 Null 이외의 값이 있어도 0행을 반환합니다.A SELECT statement that uses WHERE column_name <> NULL returns zero rows even if there are nonnull values in column_name.

ANSI_NULLS 옵션이 OFF면 Equals(=)와 Not Equal(<>) 비교 연산자가 ISO 표준을 따르지 않습니다.When ANSI_NULLS is OFF, the Equals (=) and Not Equal To (<>) comparison operators do not follow the ISO standard. WHERE column_name = NULL을 사용하는 SELECT 문은 column_name에 Null 값이 있는 행을 반환합니다.A SELECT statement that uses WHERE column_name = NULL returns the rows that have null values in column_name. WHERE column_name <> NULL을 사용하는 SELECT 문은 열에 Null 이외의 값이 있는 행을 반환합니다.A SELECT statement that uses WHERE column_name <> NULL returns the rows that have nonnull values in the column. 또한 WHERE column_name <> XYZ_value를 사용하는 SELECT 문은 XYZ_value가 아니고 NULL이 아닌 모든 행을 반환합니다.Also, a SELECT statement that uses WHERE column_name <> XYZ_value returns all rows that are not XYZ_value and that are not NULL.

ANSI_NULLS 옵션이 ON이면, null 값에 대한 모든 비교가 UNKNOWN이 됩니다.When ANSI_NULLS is ON, all comparisons against a null value evaluate to UNKNOWN. ANSI_NULLS 옵션이 OFF면 데이터 값이 NULL일 때 null 값에 대한 모든 데이터의 비교가 TRUE가 됩니다.When SET ANSI_NULLS is OFF, comparisons of all data against a null value evaluate to TRUE if the data value is NULL. SET ANSI_NULLS를 지정하지 않으면 현재 데이터베이스의 ANSI_NULLS 옵션 설정이 적용됩니다.If SET ANSI_NULLS is not specified, the setting of the ANSI_NULLS option of the current database applies. ANSI_NULLS 데이터베이스 옵션에 대한 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하세요.For more information about the ANSI_NULLS database option, see ALTER DATABASE (Transact-SQL).

다음 표에서는 ANSI_NULLS 설정이 null과 null이 아닌 값을 사용하여 많은 부울 식의 결과에 어떤 영향을 미치는지를 보여 줍니다.The following table shows how the setting of ANSI_NULLS affects the results of a number of Boolean expressions using null and non-null values.

부울 식(Boolean Expression)Boolean Expression SET ANSI_NULLS ONSET ANSI_NULLS ON SET ANSI_NULLS OFFSET ANSI_NULLS OFF
NULL = NULLNULL = NULL UNKNOWNUNKNOWN TRUETRUE
1 = NULL1 = NULL UNKNOWNUNKNOWN FALSEFALSE
NULL <> NULLNULL <> NULL UNKNOWNUNKNOWN FALSEFALSE
1 <> NULL1 <> NULL UNKNOWNUNKNOWN TRUETRUE
NULL > NULLNULL > NULL UNKNOWNUNKNOWN UNKNOWNUNKNOWN
1 > NULL1 > NULL UNKNOWNUNKNOWN UNKNOWNUNKNOWN
NULL IS NULLNULL IS NULL TRUETRUE TRUETRUE
1 IS NULL1 IS NULL FALSEFALSE FALSEFALSE
NULL IS NOT NULLNULL IS NOT NULL FALSEFALSE FALSEFALSE
1 IS NOT NULL1 IS NOT NULL TRUETRUE TRUETRUE

SET ANSI_NULLS ON 옵션은 비교의 피연산자 중 하나가 NULL 변수 또는 리터럴 NULL 변수인 경우에만 해당 비교에 영향을 줍니다.SET ANSI_NULLS ON affects a comparison only if one of the operands of the comparison is either a variable that is NULL or a literal NULL. 비교의 양쪽이 열 또는 복합 식인 경우에는 설정이 비교에 영향을 주지 않습니다.If both sides of the comparison are columns or compound expressions, the setting does not affect the comparison.

ANSI_NULLS 데이터베이스 옵션이나 SET ANSI_NULLS 설정에 관계없이 스크립트가 의도했던 대로 실행되도록 하려면 Null 값을 포함할 수 있는 비교에 IS NULL과 IS NOT NULL을 사용하십시오.For a script to work as intended, regardless of the ANSI_NULLS database option or the setting of SET ANSI_NULLS, use IS NULL and IS NOT NULL in comparisons that might contain null values.

분산 쿼리를 실행할 때는 ANSI_NULLS를 ON으로 설정해야 합니다.ANSI_NULLS should be set to ON for executing distributed queries.

계산 열이나 인덱싱된 뷰에서 인덱스를 만들거나 변경할 때는 ANSI_NULLS 옵션도 ON으로 설정해야 합니다.ANSI_NULLS must also be ON when you are creating or changing indexes on computed columns or indexed views. SET ANSI_NULLS 옵션이 OFF면 계산 열의 인덱스가 있는 테이블이나 인덱싱된 뷰에서 CREATE, UPDATE, INSERT, DELETE 문이 실패합니다.If SET ANSI_NULLS is OFF, any CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail. SQL ServerSQL Server는 필요한 값을 위반하는 모든 SET 옵션이 나열된 오류를 반환합니다.returns an error that lists all SET options that violate the required values. 뿐만 아니라 SELECT 문 실행 시 SET ANSI_NULLS 옵션이 OFF면 SQL ServerSQL Server는 계산 열이나 뷰의 인덱스 값을 무시하고 테이블이나 뷰에 이러한 인덱스가 없는 것처럼 SELECT 작업을 처리합니다.Also, when you execute a SELECT statement, if SET ANSI_NULLS is OFF, SQL ServerSQL Server ignores the index values on computed columns or views and resolve the select operation as if there were no such indexes on the tables or views.

참고

ANSI_NULLS는 계산 열이나 인덱싱된 뷰의 인덱스를 처리할 때 필요한 값으로 설정해야 하는 7가지 SET 옵션 중 하나입니다.ANSI_NULLS is one of seven SET options that must be set to required values when dealing with indexes on computed columns or indexed views. ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIERCONCAT_NULL_YIELDS_NULL 옵션도 ON으로 설정해야 하고 NUMERIC_ROUNDABORT를 OFF로 설정해야 합니다.The options ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIER, and CONCAT_NULL_YIELDS_NULL must also be set to ON, and NUMERIC_ROUNDABORT must be set to OFF.

SQL ServerSQL Server Native Client ODBC 드라이버와 SQL ServerSQL ServerSQL ServerSQL Server Native Client OLE DB 공급자는 연결될 때 자동으로 ANSI_NULLS를 ON으로 설정합니다.The SQL ServerSQL Server Native Client ODBC driver and SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server automatically set ANSI_NULLS to ON when connecting. ODBC 데이터 원본과 ODBC 연결 특성 또는 SQL ServerSQL Server 인스턴스에 연결하기 전에 애플리케이션에 설정된 OLE DB 연결 속성에서 이 설정을 구성할 수 있습니다.This setting can be configured in ODBC data sources, in ODBC connection attributes, or in OLE DB connection properties that are set in the application before connecting to an instance of SQL ServerSQL Server. SET ANSI_NULLS의 기본값은 OFF입니다.The default for SET ANSI_NULLS is OFF.

ANSI_DEFAULTS 옵션이 ON이면 ANSI_NULLS가 활성화됩니다.When ANSI_DEFAULTS is ON, ANSI_NULLS is enabled.

ANSI_NULLS 옵션은 실행 시 또는 런타임에 정의되며 구문 분석 시에는 정의되지 않습니다.The setting of ANSI_NULLS is defined at execute or run time and not at parse time.

이 설정에 대한 현재 설정을 보려면 다음 쿼리를 실행합니다.To view the current setting for this setting, run the following query:

DECLARE @ANSI_NULLS VARCHAR(3) = 'OFF';  
IF ( (32 & @@OPTIONS) = 32 ) SET @ANSI_NULLS = 'ON';  
SELECT @ANSI_NULLS AS ANSI_NULLS;   

사용 권한Permissions

public 역할의 멤버 자격이 필요합니다.Requires membership in the public role.

예제Examples

다음 예에서는 Equals(=)와 Not Equal To(<>) 비교 연산자를 사용하여 테이블의 NULL 및 Null이 아닌 값에 비교를 수행합니다.The following example uses the Equals (=) and Not Equal To (<>) comparison operators to make comparisons with NULL and non-null values in a table. 또한 IS NULLSET ANSI_NULLS 설정의 영향을 받지 않는다는 것을 보여 줍니다.The example also shows that IS NULL is not affected by the SET ANSI_NULLS setting.

-- Create table t1 and insert values.  
CREATE TABLE dbo.t1 (a INT NULL);  
INSERT INTO dbo.t1 values (NULL),(0),(1);  
GO  
  
-- Print message and perform SELECT statements.  
PRINT 'Testing default setting';  
DECLARE @varname int;   
SET @varname = NULL;  
  
SELECT a  
FROM t1   
WHERE a = @varname;  
  
SELECT a   
FROM t1   
WHERE a <> @varname;  
  
SELECT a   
FROM t1   
WHERE a IS NULL;  
GO 

이제 ANSI_NULLS를 ON으로 설정하고 테스트합니다.Now set ANSI_NULLS to ON and test.

PRINT 'Testing ANSI_NULLS ON';  
SET ANSI_NULLS ON;  
GO  
DECLARE @varname int;  
SET @varname = NULL  
  
SELECT a   
FROM t1   
WHERE a = @varname;  
  
SELECT a   
FROM t1   
WHERE a <> @varname;  
  
SELECT a   
FROM t1   
WHERE a IS NULL;  
GO  

이제 ANSI_NULLS를 OFF로 설정하고 테스트합니다.Now set ANSI_NULLS to OFF and test.

PRINT 'Testing ANSI_NULLS OFF';  
SET ANSI_NULLS OFF;  
GO  
DECLARE @varname int;  
SET @varname = NULL;  
SELECT a   
FROM t1   
WHERE a = @varname;  
  
SELECT a   
FROM t1   
WHERE a <> @varname;  
  
SELECT a   
FROM t1   
WHERE a IS NULL;  
GO  
  
-- Drop table t1.  
DROP TABLE dbo.t1;  

참고 항목See Also

SET 문(Transact-SQL) SET Statements (Transact-SQL)
SESSIONPROPERTY(Transact-SQL) SESSIONPROPERTY (Transact-SQL)
=(같음)(Transact-SQL) = (Equals) (Transact-SQL)
IF...ELSE(Transact-SQL) IF...ELSE (Transact-SQL)
<> (같지 않음) (Transact-SQL) <> (Not Equal To) (Transact-SQL)
SET 문(Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL) SET ANSI_DEFAULTS (Transact-SQL)
WHERE(Transact-SQL) WHERE (Transact-SQL)
WHILE(Transact-SQL)WHILE (Transact-SQL)