SET NUMERIC_ROUNDABORT (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di analisi (PDW)Endpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

Specifica il livello di segnalazione degli errori generato quando l'arrotondamento in un'espressione comporta una perdita di precisione.

Convenzioni relative alla sintassi Transact-SQL

Sintassi


SET NUMERIC_ROUNDABORT { ON | OFF }

Osservazioni:

Quando SET NUMERIC_ROUNDABORT è ON, si genera un errore dopo che si verifica una perdita di precisione in un'espressione. Se è impostata su OFF, in caso di perdita di precisione non viene generato alcun messaggio di errore. 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 SETSET NUMERIC_ROUNDABORT è ON, 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 FUORI
SET SET ARITHABORT ON Viene generato un errore, senza la restituzione di alcun set di risultati. Nessun errore o avviso, arrotondamento del risultato.
SET SET ARITHABORT OFF Viene restituito un avviso e l'espressione restituisce NULL. Nessun errore o avviso, arrotondamento del risultato.

L'impostazione di viene impostata in fase di SET NUMERIC_ROUNDABORT esecuzione o in fase di esecuzione e non in fase di analisi.

SET NUMERIC_ROUNDABORT deve essere DISATTIVATO quando crei o modifichi indici su colonne calcolate o viste indicizzate. Se SET NUMERIC_ROUNDABORT è ON, le seguenti istruzioni su tabelle con indici su colonne calcolate o viste indicizzate falliscono:

  • CREATE
  • UPDATE
  • INSERT
  • DELETE

Per maggiori informazioni sulle impostazioni di opzioni richieste SET con viste indicizzate e indici su colonne calcolate, vedi Considerazioni quando usi le SET Sentenzioni.

Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito:

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

Autorizzazioni

È richiesta l'appartenenza al ruolo public .

Esempi

Nell'esempio seguente vengono usati due valori precisi fino a quattro cifre decimali. Vengono aggiunti e archiviati in una variabile precisa fino a 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  

Vedi anche

Tipi di dati (Transact-SQL)
SET Istruzioni (Transact-SQL)
SET SET ARITHABORT (Transact-SQL)