SET NUMERIC_ROUNDABORT (Transact-SQL)

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

식의 반올림에서 정밀도가 손실될 경우 생성되는 오류 보고의 수준을 지정합니다.

Transact-SQL 구문 표기 규칙

구문


SET NUMERIC_ROUNDABORT { ON | OFF }

설명

가 ON일 때 SET NUMERIC_ROUNDABORT , 식에서 정밀도 손실이 발생하면 오류가 발생합니다. OFF로 설정하면 전체 자릿수가 손실되어도 오류 메시지가 생성되지 않습니다. 결과를 저장하는 열 또는 변수의 전체 자릿수로 결과가 반올림됩니다.

정밀도가 낮은 열이나 변수에 고정 정밀도가 있는 값을 저장하려고 할 때 정밀도 손실이 발생합니다.

가 ON이라 SETSET NUMERIC_ROUNDABORT 면, SET ARITHABORT 생성된 오류의 심각도를 결정합니다. 다음 표에서는 정밀도 손실이 발생할 때 두 가지 설정의 결과를 보여 줍니다.

설정 SET NUMERIC_ROUNDABORT 온 SET NUMERIC_ROUNDABORT 끄기
SET SET ARITHABORT 온 오류가 생성되어 결과 세트가 반환되지 않습니다. 오류나 경고가 생성되지 않고, 결과가 반올림됩니다.
SET SET ARITHABORT 꺼 경고가 반환되고, 식이 NULL을 반환합니다. 오류나 경고가 생성되지 않고, 결과가 반올림됩니다.

설정 SET NUMERIC_ROUNDABORT 은 구문 분석 시간이 아니라 실행 또는 런타임에 설정됩니다.

SET NUMERIC_ROUNDABORT 계산된 열이나 인덱스 뷰에서 인덱스를 생성하거나 변경할 때는 반드시 꺼져 있어야 합니다. 만약 ON이 될 경우 SET NUMERIC_ROUNDABORT , 계산된 열이나 인덱스된 뷰에 인덱스가 있는 테이블에서 다음과 같은 문장들이 실패합니다:

  • CREATE
  • UPDATE
  • INSERT
  • DELETE

계산된 열에 인덱스 뷰와 인덱스가 포함된 필수 SET 옵션 설정에 대한 자세한 내용은 '명세서 사용 SET 시 고려사항'을 참조하세요.

이 설정에 대한 현재 설정을 보려면 다음 쿼리를 실행합니다.

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

사용 권한

public 역할의 멤버 자격이 필요합니다.

예제

다음 예제에서는 소수점 네 자리까지 정확한 두 개의 값을 보여줍니다. 소수점 두 자리까지 정확한 변수에 추가 및 저장됩니다. 다음 식에서는 SET NUMERIC_ROUNDABORT 설정과 SET ARITHABORT 설정을 다르게 지정했을 때의 결과를 보여 줍니다.

-- SET NOCOUNT to ON,   
-- SET NUMERIC_ROUNDABORT to ON, and SET ARITHABORT to ON.  
SET NOCOUNT ON;  
PRINT 'SET NUMERIC_ROUNDABORT ON';  
PRINT 'SET ARITHABORT ON';  
SET NUMERIC_ROUNDABORT ON;  
SET ARITHABORT ON;  
GO  
DECLARE @result DECIMAL(5, 2),  
   @value_1 DECIMAL(5, 4),   
   @value_2 DECIMAL(5, 4);  
SET @value_1 = 1.1234;  
SET @value_2 = 1.1234 ;  
SELECT @result = @value_1 + @value_2;  
SELECT @result;  
GO  
  
-- SET NUMERIC_ROUNDABORT to ON and SET ARITHABORT to OFF.  
PRINT 'SET NUMERIC_ROUNDABORT ON';  
PRINT 'SET ARITHABORT OFF';  
SET NUMERIC_ROUNDABORT ON;  
SET ARITHABORT OFF;  
GO  
DECLARE @result DECIMAL(5, 2),  
   @value_1 DECIMAL(5, 4),   
   @value_2 DECIMAL(5, 4);  
SET @value_1 = 1.1234;  
SET @value_2 = 1.1234 ;  
SELECT @result = @value_1 + @value_2;  
SELECT @result;  
GO  
  
-- SET NUMERIC_ROUNDABORT to OFF and SET ARITHABORT to ON.  
PRINT 'SET NUMERIC_ROUNDABORT OFF';  
PRINT 'SET ARITHABORT ON';  
SET NUMERIC_ROUNDABORT OFF;  
SET ARITHABORT ON;  
GO  
DECLARE @result DECIMAL(5, 2),  
   @value_1 DECIMAL(5, 4),   
   @value_2 DECIMAL(5, 4);  
SET @value_1 = 1.1234;  
SET @value_2 = 1.1234 ;  
SELECT @result = @value_1 + @value_2;  
SELECT @result;  
GO  
  
-- SET NUMERIC_ROUNDABORT to OFF and SET ARITHABORT to OFF.  
PRINT 'SET NUMERIC_ROUNDABORT OFF';  
PRINT 'SET ARITHABORT OFF';  
SET NUMERIC_ROUNDABORT OFF;  
SET ARITHABORT OFF;  
GO  
DECLARE @result DECIMAL(5, 2),  
   @value_1 DECIMAL(5, 4),   
   @value_2 DECIMAL(5, 4);  
SET @value_1 = 1.1234;  
SET @value_2 = 1.1234;  
SELECT @result = @value_1 + @value_2;  
SELECT @result;  
GO