SET ANSI_WARNINGS(Transact-SQL)SET ANSI_WARNINGS (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

여러 오류 상황에 대한 ISO 표준 동작을 지정합니다.Specifies ISO standard behavior for several error conditions.

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

구문Syntax

-- Syntax for SQL Server and Azure SQL Database
  
SET ANSI_WARNINGS { ON | OFF }
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse

SET ANSI_WARNINGS ON

참고

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

설명Remarks

SET ANSI_WARNINGS는 다음 조건에 적용됩니다.SET ANSI_WARNINGS affects the following conditions:

  • ON으로 설정한 경우 SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP, COUNT 등의 집계 함수에 NULL 값이 있으면 경고 메시지가 생성됩니다.When set to ON, if null values appear in aggregate functions, such as SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP, or COUNT, a warning message is generated. OFF로 설정한 경우에는 경고가 발생하지 않습니다.When set to OFF, no warning is issued.

  • ON으로 설정한 경우 0으로 나누기 및 산술 오버플로 오류가 발생하면 문이 롤백되고 오류 메시지가 생성됩니다.When set to ON, the divide-by-zero and arithmetic overflow errors cause the statement to be rolled back and an error message is generated. OFF로 설정한 경우 0으로 나누기 및 산술 오버플로 오류가 발생하면 NULL 값이 반환됩니다.When set to OFF, the divide-by-zero and arithmetic overflow errors cause null values to be returned. 새 값의 길이가 열의 최대 크기를 초과하는 character , Unicode 또는 binary 열에 INSERT나 UPDATE를 시도하면 0으로 나누기 또는 산술 오버플로 오류로 인해 Null 값이 반환될 수 있습니다.The behavior in which a divide-by-zero or arithmetic overflow error causes null values to be returned occurs if an INSERT or UPDATE is tried on a character , Unicode, or binary column in which the length of a new value exceeds the maximum size of the column. SET ANSI_WARNINGS 옵션이 ON이면 ISO 표준에 지정된 대로 INSERT나 UPDATE가 취소됩니다.If SET ANSI_WARNINGS is ON, the INSERT or UPDATE is canceled as specified by the ISO standard. 문자 열에 대해서는 후행 공백이, 이진 열에 대해서는 후행 NULL 값이 무시됩니다.Trailing blanks are ignored for character columns and trailing nulls are ignored for binary columns. 이 옵션이 OFF이면 열의 크기에 맞게 데이터가 잘리고 문이 성공적으로 실행됩니다.When OFF, data is truncated to the size of the column and the statement succeeds.

참고

binary 또는 varbinary 데이터로 또는 그 역으로의 변환에서 잘림이 일어날 때는 SET 옵션에 상관없이 경고나 오류가 생성되지 않습니다.When truncation occurs in any conversion to or from binary or varbinary data, no warning or error is issued, regardless of SET options.

참고

저장 프로시저 또는 사용자 정의 함수에 매개 변수를 전달할 때 또는 일괄 처리 문에서 변수를 선언하고 설정할 때 ANSI_WARNINGS는 인식되지 않습니다.ANSI_WARNINGS is not honored when passing parameters in a stored procedure, user-defined function, or when declaring and setting variables in a batch statement. 예를 들어 변수가 char(3) 로 정의된 경우 3자보다 큰 값으로 설정하면 해당 데이터가 정의된 크기로 잘리고 INSERT 또는 UPDATE 문은 성공합니다.For example, if a variable is defined as char(3) , and then set to a value larger than three characters, the data is truncated to the defined size and the INSERT or UPDATE statement succeeds.

sp_configure의 user options를 사용하여 서버의 모든 연결에 대해 ANSI_WARNINGS의 기본값을 설정할 수 있습니다.You can use the user options option of sp_configure to set the default setting for ANSI_WARNINGS for all connections to the server. 자세한 내용은 이 항목의 뒷부분에 나오는 sp_configure (Transact-SQL)백업 및 복원의 기본적인 백업 미디어 관련 용어를 소개합니다.For more information, see sp_configure (Transact-SQL).

계산 열이나 인덱싱된 뷰에서 인덱스를 만들거나 조작할 때는 ANSI_WARNINGS 옵션을 ON으로 설정해야 합니다.ANSI_WARNINGS must be ON when you are creating or manipulating indexes on computed columns or indexed views. SET ANSI_WARNINGS 옵션이 OFF이면 인덱싱된 뷰나 계산 열에 인덱스가 있는 테이블에서 CREATE, UPDATE, INSERT, DELETE 문이 실패합니다.If SET ANSI_WARNINGS is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail. 인덱싱된 뷰 및 계산 열의 인덱스에 사용되는 필수 SET 옵션 설정에 대한 자세한 내용은 SET Statements (Transact-SQL)에서 "SET 문 사용 시 고려 사항"을 참조하세요.For more information about required SET option settings with indexed views and indexes on computed columns, see "Considerations When You Use the SET Statements" in SET Statements (Transact-SQL).

SQL ServerSQL Server에는 ANSI_WARNINGS 데이터베이스 옵션이 포함되어 있습니다.includes the ANSI_WARNINGS database option. 이 옵션은 SET ANSI_WARNINGS와 같습니다.This is equivalent to SET ANSI_WARNINGS. SET ANSI_WARNINGS 옵션이 ON이면, 0으로 나누기나 데이터베이스 열에 대해 너무 큰 문자열에서 오류나 경고가 발생하고, 기타 유사한 오류가 발생합니다.When SET ANSI_WARNINGS is ON, errors or warnings are raised in divide-by-zero, string too large for database column, and other similar errors. SET ANSI_WARNINGS 옵션이 OFF이면 이러한 오류나 경고가 발생하지 않습니다.When SET ANSI_WARNINGS is OFF, these errors and warnings are not raised. model 데이터베이스에서 SET ANSI_WARNINGS의 기본값은 OFF입니다.The default value in the model database for SET ANSI_WARNINGS is OFF. 이 옵션을 지정하지 않으면 ANSI_WARNINGS 설정이 적용됩니다.If not specified, the setting of ANSI_WARNINGS applies. SET ANSI_WARNINGS를 OFF로 설정하면 SQL ServerSQL Serversys.databases 카탈로그 뷰에 있는 is_ansi_warnings_on 열의 값을 사용합니다.If SET ANSI_WARNINGS is OFF, SQL ServerSQL Server uses the value of the is_ansi_warnings_on column in the sys.databases catalog view.

중요

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

SQL ServerSQL Server Native Client ODBC 드라이버, SQL ServerSQL Server에 대한 SQL ServerSQL Server Native Client OLE DB 공급자 및 SQL ServerSQL Server용 Microsoft JDBC Driver와 같은 클라이언트는 연결 플래그를 사용하여 자동으로 ANSI_WARNINGS를 ON으로 설정합니다.Clients, such as the SQL ServerSQL Server Native Client ODBC driver, the SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server, and the Microsoft JDBC Driver for SQL ServerSQL Server automatically set ANSI_WARNINGS to ON with a connection flag. 이 옵션은 연결하기 전에 애플리케이션에 설정된 ODBC 데이터 원본과 ODBC 연결 특성에서 구성할 수 있습니다.This can be configured in ODBC data sources, in ODBC connection attributes, set in the application before connecting. DB-Library 애플리케이션으로부터 연결할 때 SET ANSI_WARNINGS의 기본값은 OFF입니다.The default for SET ANSI_WARNINGS is OFF for connections from DB-Library applications. 자세한 내용은 TDS(Tabular Data Stream) 프로토콜 사양에서 LOGIN7을 참조하세요.For additional information, see LOGIN7 in the Tabular Data Stream (TDS) protocol specifications.

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

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

SET ARITHABORT 옵션이나 SET ARITHIGNORE 옵션 중 하나가 OFF이고 SET ANSI_WARNINGS 옵션이 ON이면 SQL ServerSQL Server에서 0으로 나누기 또는 오버플로 오류가 발생할 경우 여전히 오류 메시지를 반환합니다.If either SET ARITHABORT or SET ARITHIGNORE is OFF and SET ANSI_WARNINGS is ON, SQL ServerSQL Server still returns an error message when encountering divide-by-zero or overflow errors.

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

DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';  
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';  
SELECT @ANSI_WARN AS ANSI_WARNINGS;  

사용 권한Permissions

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

Examples

다음 예에서는 앞에서 언급한 대로 SET ANSI_WARNINGS 옵션이 ON과 OFF로 설정되었을 때의 세 가지 상황을 보여 줍니다.The following example demonstrates the three situations that are previously mentioned, with the SET ANSI_WARNINGS to ON and OFF.

CREATE TABLE T1   
(  
   a int,   
   b int NULL,   
   c varchar(20)  
);  
GO  
  
SET NOCOUNT ON;  
  
INSERT INTO T1   
VALUES (1, NULL, '')   
      ,(1, 0, '')  
      ,(2, 1, '')  
      ,(2, 2, '');  
  
SET NOCOUNT OFF;  
GO  

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

PRINT '**** Setting ANSI_WARNINGS ON';  
GO  
  
SET ANSI_WARNINGS ON;  
GO  
  
PRINT 'Testing NULL in aggregate';  
GO  
SELECT a, SUM(b)   
FROM T1   
GROUP BY a;  
GO  
  
PRINT 'Testing String Overflow in INSERT';  
GO  
INSERT INTO T1   
VALUES (3, 3, 'Text string longer than 20 characters');  
GO  
  
PRINT 'Testing Divide by zero';  
GO  
SELECT a / b AS ab   
FROM T1;  
GO  

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

PRINT '**** Setting ANSI_WARNINGS OFF';  
GO  
SET ANSI_WARNINGS OFF;  
GO  
  
PRINT 'Testing NULL in aggregate';  
GO  
SELECT a, SUM(b)   
FROM T1   
GROUP BY a;  
GO  
  
PRINT 'Testing String Overflow in INSERT';  
GO  
INSERT INTO T1   
VALUES (4, 4, 'Text string longer than 20 characters');  
GO  
SELECT a, b, c   
FROM T1  
WHERE a = 4;  
GO  
  
PRINT 'Testing Divide by zero';  
GO  
SELECT a / b AS ab   
FROM T1;  
GO  
  
DROP TABLE T1;  

참고 항목See Also

INSERT(Transact-SQL) INSERT (Transact-SQL)
SELECT(Transact-SQL) SELECT (Transact-SQL)
SET 문(Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL) SET ANSI_DEFAULTS (Transact-SQL)
SESSIONPROPERTY(Transact-SQL)SESSIONPROPERTY (Transact-SQL)