SET NUMERIC_ROUNDABORT (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема платформы аналитики (PDW)Конечная точка SQL аналитики в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

Указывает уровень детализации отчетов об ошибках, которые формируются при потере точности во время округления.

Соглашения о синтаксисе Transact-SQL

Синтаксис


SET NUMERIC_ROUNDABORT { ON | OFF }

Замечания

Когда SET NUMERIC_ROUNDABORT ВКЛЮЧЕНО, ошибка возникает после потери точности в выражении. Если задано значение OFF, потеря точности не приводит к сообщениям об ошибках. Результат округляется с точностью столбца или переменной, в которых сохраняется результат.

Потеря точности происходит, когда выполняется попытка сохранения значения с фиксированной точностью в столбце или переменной с меньшей точностью.

Если SETSET NUMERIC_ROUNDABORT ВКЛЮЧЕНО, SET ARITHABORT определяет степень сгенерированной ошибки. В следующей таблице показано влияние этих двух параметров на сообщения об ошибках при потере точности.

Параметр SET NUMERIC_ROUNDABORT НА SET NUMERIC_ROUNDABORT ВЫКЛЮЧЕНО
SET SET ARITHABORT НА Формируется ошибка; результирующий набор не возвращается. Ошибок и предупреждений нет; результат округлен.
SET SET ARITHABORT ВЫКЛЮЧЕНО Создается предупреждение; выражение возвращает NULL. Ошибок и предупреждений нет; результат округлен.

Параметр SET NUMERIC_ROUNDABORT устанавливается во время выполнения или выполнения, а не во время синтаксического анализа.

SET NUMERIC_ROUNDABORT Должно быть ВЫКЛЮЧЕНО, когда вы создаёте или меняете индексы на вычисленных столбцах или индексированных представлениях. Если 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  

См. также

Типы данных (Transact-SQL)
SET Операторы (Transact-SQL)
SET SET ARITHABORT (Transact-SQL)