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

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure 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 a artículo Convenciones de sintaxis de Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintaxisSyntax


SET NUMERIC_ROUNDABORT { ON | OFF }

NotasRemarks

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. Si se establece en OFF, las pérdidas de precisión no generan mensajes de error.If set to OFF, losses of precision don't generate error messages. El resultado se redondea a la precisión de la columna o variable en la que se almacena.The result is rounded to the precision of the column or variable storing the result.

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.Loss of precision occurs when you attempt to store a value with 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; no se devuelve ningún conjunto de resultados.Error is generated; no set of results 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 cuando se crean o cambian índices en columnas calculadas o vistas indexadas.SET NUMERIC_ROUNDABORT must be OFF when you're creating or changing indexes on computed columns or indexed views. Si SET NUMERIC_ROUNDABORT es ON, se producirán errores en las instrucciones siguientes en tablas con índices en columnas calculadas o vistas indexadas:If SET NUMERIC_ROUNDABORT is ON, the following statements on tables with indexes on computed columns or indexed views fail:

  • CREATECREATE
  • UPDATEUPDATE
  • INSERTINSERT
  • DeleteDELETE

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.For more information about required SET option settings with indexed views and indexes on computed columns, see Considerations When You Use the SET Statements.

Para ver la configuración actual de este valor, ejecute la siguiente consulta: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;  
  

PermisosPermissions

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

EjemplosExamples

En el ejemplo siguiente se muestran dos valores con una precisión de hasta cuatro posiciones decimales.The following example shows two values that are precise to four decimal places. Se suman y almacenan en una variable con una precisión de dos posiciones decimales.They get added and stored in a variable that is precise to 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  

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