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

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Specifica il livello di segnalazione degli errori generato quando l'arrotondamento in un'espressione comporta una perdita di precisione.Specifies the level of error reporting generated when rounding in an expression causes a loss of precision.

Icona di collegamento a un articoloConvenzioni della sintassi Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintassiSyntax


SET NUMERIC_ROUNDABORT { ON | OFF }

RemarksRemarks

Quando l'opzione SET NUMERIC_ROUNDABORT è impostata su ON, viene generato un errore dopo che si verifica una perdita di precisione in un'espressione.When SET NUMERIC_ROUNDABORT is ON, an error is generated after a loss of precision occurs in an expression. Se è impostata su OFF, in caso di perdita di precisione non viene generato alcun messaggio di errore.If set to OFF, losses of precision don't generate error messages. Il risultato viene arrotondato alla precisione della colonna o della variabile in cui viene archiviato.The result is rounded to the precision of the column or variable storing the result.

La perdita di precisione si verifica quando si tenta di archiviare un valore con precisione fissa in una colonna o variabile con grado di precisione inferiore.Loss of precision occurs when you attempt to store a value with fixed precision in a column or variable with less precision.

Se l'opzione SET NUMERIC_ROUNDABORT è impostata su ON, l'opzione SET ARITHABORT determina la gravità dell'errore generato.If SET NUMERIC_ROUNDABORT is ON, SET ARITHABORT determines the severity of the generated error. In questa tabella vengono descritti i risultati ottenuti con le due impostazioni quando si verifica una perdita di precisione.This table shows the effects of these two settings when a loss of precision occurs.

ImpostazioneSetting SET NUMERIC_ROUNDABORT ONSET NUMERIC_ROUNDABORT ON SET NUMERIC_ROUNDABORT OFFSET NUMERIC_ROUNDABORT OFF
SET ARITHABORT ONSET ARITHABORT ON Viene generato un errore, senza la restituzione di alcun set di risultati.Error is generated; no set of results returned. Nessun errore o avviso, arrotondamento del risultato.No errors or warnings; result is rounded.
SET ARITHABORT OFFSET ARITHABORT OFF Viene restituito un avviso e l'espressione restituisce NULL.Warning is returned; expression returns NULL. Nessun errore o avviso, arrotondamento del risultato.No errors or warnings; result is rounded.

L'opzione SET NUMERIC_ROUNDABORT viene impostata in fase di esecuzione, non in fase di analisi.The setting of SET NUMERIC_ROUNDABORT is set at execute or run time and not at parse time.

È necessario che l'opzione SET NUMERIC_ROUNDABORT sia impostata su OFF quando vengono creati o modificati indici in colonne calcolate o viste indicizzate.SET NUMERIC_ROUNDABORT must be OFF when you're creating or changing indexes on computed columns or indexed views. Se l'opzione SET NUMERIC_ROUNDABORT è impostata su ON, le istruzioni seguenti eseguite in tabelle con indici di colonne calcolate o viste indicizzate hanno esito negativo:If SET NUMERIC_ROUNDABORT is ON, the following statements on tables with indexes on computed columns or indexed views fail:

  • CREATECREATE
  • UPDATEUPDATE
  • INSERTINSERT
  • EliminaDELETE

Per altre informazioni sulle impostazioni dell'opzione SET necessarie per viste indicizzate e indici nelle colonne calcolate, vedere Considerazioni sull'utilizzo delle istruzioni 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.

Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito: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;  
  

AutorizzazioniPermissions

È richiesta l'appartenenza al ruolo public .Requires membership in the public role.

EsempiExamples

Nell'esempio seguente vengono usati due valori precisi fino a quattro cifre decimali.The following example shows two values that are precise to four decimal places. Vengono aggiunti e archiviati in una variabile precisa fino a due cifre decimali.They get added and stored in a variable that is precise to two decimal places. Le espressioni illustrano il risultato ottenuto con le diverse impostazioni delle opzioni SET NUMERIC_ROUNDABORT e 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  

Vedere ancheSee Also

Tipi di dati (Transact-SQL) Data Types (Transact-SQL)
Istruzioni SET (Transact-SQL) SET Statements (Transact-SQL)
SET ARITHABORT (Transact-SQL)SET ARITHABORT (Transact-SQL)