Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure 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)