적용 대상:SQL 서버
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft Fabric
의 SQL 분석 엔드포인트Microsoft Fabric
의 웨어하우스Microsoft Fabric의 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