SET NUMERIC_ROUNDABORT (Transact-SQL)SET NUMERIC_ROUNDABORT (Transact-SQL)

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síAzure SQL DatabasesíAzure SQL Data Warehouse síAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Especifica el nivel de informes de error generados cuando el redondeo en una expresión produce pérdida de precisión.Specifies the level of error reporting generated when rounding in an expression causes a loss of precision.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax


SET NUMERIC_ROUNDABORT { ON | OFF }

ComentariosRemarks

Cuando SET NUMERIC_ROUNDABORT es ON, después de producirse una pérdida de precisión en una expresión se genera un error.When SET NUMERIC_ROUNDABORT is ON, an error is generated after a loss of precision occurs in an expression. Cuando es OFF, las pérdidas de precisión no generan mensajes de error y el resultado se redondea con la precisión de la columna o variable que lo almacena.When OFF, losses of precision do not generate error messages and the result is rounded to the precision of the column or variable storing the result.

La pérdida de precisión aparece cuando se intenta almacenar un valor de precisión fija en una columna o variable con precisión inferior.Loss of precision occurs when an attempt is made to store a value with a fixed precision in a column or variable with less precision.

Si SET NUMERIC_ROUNDABORT es ON, SET ARITHABORT determina la gravedad del error generado.If SET NUMERIC_ROUNDABORT is ON, SET ARITHABORT determines the severity of the generated error. Esta tabla muestra los efectos de los dos valores cuando se produce una pérdida de precisión.This table shows the effects of these two settings when a loss of precision occurs.

ConfiguraciónSetting SET NUMERIC_ROUNDABORT ONSET NUMERIC_ROUNDABORT ON SET NUMERIC_ROUNDABORT OFFSET NUMERIC_ROUNDABORT OFF
SET ARITHABORT ONSET ARITHABORT ON Se genera un error y no se devuelve ningún conjunto de resultados.Error is generated; no result set returned. No se genera ningún error ni advertencia y el resultado se redondea.No errors or warnings; result is rounded.
SET ARITHABORT OFFSET ARITHABORT OFF Se genera una advertencia y la expresión devuelve NULL.Warning is returned; expression returns NULL. No se genera ningún error ni advertencia y el resultado se redondea.No errors or warnings; result is rounded.

La opción SET NUMERIC_ROUNDABORT se establece en tiempo de ejecución, no en tiempo de análisis.The setting of SET NUMERIC_ROUNDABORT is set at execute or run time and not at parse time.

SET NUMERIC_ROUNDABORT debe ser OFF al crear o cambiar índices en columnas calculadas o vistas indizadas.SET NUMERIC_ROUNDABORT must be OFF when you are creating or changing indexes on computed columns or indexed views. Si SET NUMERIC_ROUNDABORT es ON, CREATE, producirá un error en las instrucciones UPDATE, INSERT y DELETE en tablas con índices en columnas calculadas o vistas indizadas.If SET NUMERIC_ROUNDABORT is ON, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views fail. Para obtener más información acerca de las configuraciones de opción de SET requeridas con vistas indizadas e índices en columnas calculadas, vea "Consideraciones cuando se Use las instrucciones SET" en instrucciones SET ( Transact-SQL ) .For more information about required SET option settings with indexed views and indexes on computed columns, see "Considerations When You Use the SET Statements" in SET Statements (Transact-SQL).

Para ver la configuración actual de esta configuración, ejecute la consulta siguiente:To view the current setting for this setting, run the following query:

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

PermissionsPermissions

Debe pertenecer al rol public .Requires membership in the public role.

EjemplosExamples

En este ejemplo se suman dos valores con precisión de cuatro posiciones decimales y se almacena el resultado en una variable con precisión de dos posiciones decimales.The following example shows two values with a precision of four decimal places that are added and stored in a variable with a precision of two decimal places. Las expresiones demuestran los efectos de las diferentes configuraciones de SET NUMERIC_ROUNDABORT y SET ARITHABORT.The expressions demonstrate the effects of the different SET NUMERIC_ROUNDABORT and SET ARITHABORT settings.

-- 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  

Vea tambiénSee Also

Tipos de datos (Transact-SQL) Data Types (Transact-SQL)
Instrucciones SET (Transact-SQL) SET Statements (Transact-SQL)
SET ARITHABORT ( Transact-SQL )SET ARITHABORT (Transact-SQL)