SET NUMERIC_ROUNDABORT (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Especifica el nivel de informes de error generados cuando el redondeo en una expresión produce pérdida de precisión.

Convenciones de sintaxis de Transact-SQL

Sintaxis


SET NUMERIC_ROUNDABORT { ON | OFF }

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Comentarios

Cuando SET NUMERIC_ROUNDABORT es ON, después de producirse una pérdida de precisión en una expresión se genera un error. Si se establece en OFF, las pérdidas de precisión no generan mensajes de error. El resultado se redondea a la precisión de la columna o variable en la que se almacena.

La pérdida de precisión se produce cuando se intenta almacenar un valor de precisión fija en una columna o variable con precisión inferior.

Si SET NUMERIC_ROUNDABORT es ON, SET ARITHABORT determina la gravedad del error generado. Esta tabla muestra los efectos de los dos valores cuando se produce una pérdida de precisión.

Configuración SET NUMERIC_ROUNDABORT ON SET NUMERIC_ROUNDABORT OFF
SET ARITHABORT ON Se genera un error; no se devuelve ningún conjunto de resultados. No se genera ningún error ni advertencia y el resultado se redondea.
SET ARITHABORT OFF Se genera una advertencia y la expresión devuelve NULL. No se genera ningún error ni advertencia y el resultado se redondea.

La opción SET NUMERIC_ROUNDABORT se establece en tiempo de ejecución, no en tiempo de análisis.

SET NUMERIC_ROUNDABORT debe ser OFF cuando se crean o cambian índices en columnas calculadas o vistas indexadas. Si SET NUMERIC_ROUNDABORT es ON, se producirán errores en las instrucciones siguientes en tablas con índices en columnas calculadas o vistas indexadas:

  • CREATE
  • UPDATE
  • INSERT
  • Delete

Para más información sobre las configuraciones de la opción SET requeridas con vistas indexadas e índices en columnas calculadas, vea Consideraciones al utilizar las instrucciones SET.

Para ver la configuración actual de este valor, ejecute la siguiente consulta:

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

Permisos

Debe pertenecer al rol public .

Ejemplos

En el ejemplo siguiente se muestran dos valores con una precisión de hasta cuatro posiciones decimales. Se suman y almacenan en una variable con una precisión de dos posiciones decimales. Las expresiones demuestran los efectos de las diferentes configuraciones de SET NUMERIC_ROUNDABORT y 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  

Consulte también

Tipos de datos (Transact-SQL)
Instrucciones SET (Transact-SQL)
SET ARITHABORT (Transact-SQL)