Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: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