Condividi tramite


SET NUMERIC_ROUNDABORT (Transact-SQL)

Specifica il livello di errore generato quando l'arrotondamento di un'espressione comporta una perdita di precisione.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

SET NUMERIC_ROUNDABORT { ON | OFF } 

Osservazioni

Quando l'opzione SET NUMERIC_ROUNDABORT è impostata su ON, viene generato un errore dopo che si verifica una perdita di precisione in un'espressione. Quando l'opzione è impostata su OFF, in seguito alla perdita di precisione non viene visualizzato alcun messaggio di errore e il risultato viene arrotondato alla precisione della colonna o della variabile in cui viene archiviato.

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.

Se l'opzione SET NUMERIC_ROUNDABORT è impostata su ON, l'opzione SET ARITHABORT determina la gravità dell'errore generato. In questa tabella vengono descritti i risultati ottenuti con le due impostazioni quando si verifica una perdita di precisione.

Impostazione

SET NUMERIC_ROUNDABORT ON

SET NUMERIC_ROUNDABORT OFF

SET ARITHABORT ON

Viene generato un errore, senza la restituzione di alcun set di risultati.

Nessun errore o avviso, arrotondamento del risultato.

SET ARITHABORT OFF

Viene restituito un avviso e l'espressione restituisce NULL.

Nessun errore o avviso, arrotondamento del risultato.

L'opzione SET NUMERIC_ROUNDABORT viene impostata in fase di esecuzione, non in fase di analisi.

È necessario che l'opzione SET NUMERIC_ROUNDABORT sia impostata su OFF quando vengono creati o modificati indici in colonne calcolate o viste indicizzate. Se l'opzione SET NUMERIC_ROUNDABORT è impostata su ON, le istruzioni CREATE, UPDATE, INSERT e DELETE eseguite in tabelle con indici di colonne calcolate o viste indicizzate hanno esito negativo. Per ulteriori informazioni sulle impostazioni dell'opzione SET necessarie per viste indicizzate e indici nelle colonne calcolate, vedere "Considerazioni sull'utilizzo delle istruzioni SET" nell'argomento SET (Transact-SQL).

Autorizzazioni

È richiesta l'appartenenza al ruolo public.

Esempi

Nell'esempio seguente vengono illustrati due valori con una precisione di quattro cifre decimali che vengono aggiunti e archiviati in una variabile con una precisione di due cifre decimali. Le espressioni illustrano il risultato ottenuto con le diverse impostazioni delle opzioni SET NUMERIC_ROUNDABORT e 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