Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Piattaforma di analisi (PDW)
Endpoint di analisi SQL in Microsoft Fabric
Magazzino in Microsoft Fabric
Database 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)