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

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Gibt an, welche Fehlerberichtsstufe generiert wird, wenn beim Runden in einem Ausdruck Genauigkeitsverluste entstehen.Specifies the level of error reporting generated when rounding in an expression causes a loss of precision.

Artikellinksymbol Transact-SQL-SyntaxkonventionenArticle link icon Transact-SQL Syntax Conventions

SyntaxSyntax


SET NUMERIC_ROUNDABORT { ON | OFF }

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

BemerkungenRemarks

Wenn SET NUMERIC_ROUNDABORT auf ON festgelegt ist, wird ein Fehler generiert, wenn ein Genauigkeitsverlust in einem Ausdruck aufgetreten ist.When SET NUMERIC_ROUNDABORT is ON, an error is generated after a loss of precision occurs in an expression. Wenn OFF festgelegt ist, werden keine Fehlermeldungen generiert, wenn ein Genauigkeitsverlust auftritt.If set to OFF, losses of precision don't generate error messages. Das Ergebnis wird auf die Genauigkeit der Spalte oder Variable gerundet, die das Ergebnis speichert.The result is rounded to the precision of the column or variable storing the result.

Ein Genauigkeitsverlust entsteht, wenn Sie versuchen einen Wert mit fester Genauigkeit in einer Spalte oder Variablen mit geringerer Genauigkeit zu speichern.Loss of precision occurs when you attempt to store a value with fixed precision in a column or variable with less precision.

Wenn SET NUMERIC_ROUNDABORT auf ON festgelegt ist, bestimmt SET ARITHABORT den Schweregrad des generierten Fehlers.If SET NUMERIC_ROUNDABORT is ON, SET ARITHABORT determines the severity of the generated error. Die folgende Tabelle zeigt die Auswirkungen dieser beiden Einstellungen im Falle eines Genauigkeitsverlusts.This table shows the effects of these two settings when a loss of precision occurs.

EinstellungSetting SET NUMERIC_ROUNDABORT ONSET NUMERIC_ROUNDABORT ON SET NUMERIC_ROUNDABORT OFFSET NUMERIC_ROUNDABORT OFF
SET ARITHABORT ONSET ARITHABORT ON Fehler wird generiert; es werden keine Ergebnisse zurückgegeben.Error is generated; no set of results returned. Keine Fehler oder Warnungen, Ergebnis wird gerundet.No errors or warnings; result is rounded.
SET ARITHABORT OFFSET ARITHABORT OFF Warnung wird zurückgegeben; Ausdruck gibt NULL zurück.Warning is returned; expression returns NULL. Keine Fehler oder Warnungen, Ergebnis wird gerundet.No errors or warnings; result is rounded.

Die Einstellung von SET NUMERIC_ROUNDABORT wird zur Ausführungszeit und nicht zur Analysezeit festgelegt.The setting of SET NUMERIC_ROUNDABORT is set at execute or run time and not at parse time.

SET NUMERIC_ROUNDABORT muss beim Erstellen oder Ändern von Indizes für berechnete Spalten oder indizierte Sichten auf OFF festgelegt sein.SET NUMERIC_ROUNDABORT must be OFF when you're creating or changing indexes on computed columns or indexed views. Wenn SET NUMERIC_ROUNDABORT auf ON festgelegt ist, schlagen die folgenden Anweisungen in Tabellen mit Indizes für berechnete Spalten oder indizierte Sicht fehl:If SET NUMERIC_ROUNDABORT is ON, the following statements on tables with indexes on computed columns or indexed views fail:

  • CREATECREATE
  • UPDATEUPDATE
  • INSERTINSERT
  • DeleteDELETE

Weitere Informationen zu den erforderlichen Einstellungen der SET-Option mit indizierten Sichten und Indizes für berechnete Spalten finden Sie in den Überlegungen zum Verwenden von SET-Anweisungen.For more information about required SET option settings with indexed views and indexes on computed columns, see Considerations When You Use the SET Statements.

Um die aktuelle Einstellung anzuzeigen, führen Sie die folgende Abfrage aus: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;  
  

BerechtigungenPermissions

Erfordert die Mitgliedschaft in der public -Rolle.Requires membership in the public role.

BeispieleExamples

Im folgenden Beispiel werden zwei Werte gezeigt, die auf vier Dezimalstellen genau sind.The following example shows two values that are precise to four decimal places. Diese werden zu einer Variablen hinzugefügt und in dieser gespeichert, die auf zwei Dezimalstellen genau ist.They get added and stored in a variable that is precise to two decimal places. Die Ausdrücke zeigen die Auswirkungen der unterschiedlichen SET NUMERIC_ROUNDABORT- und SET ARITHABORT-Einstellungen.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  

Weitere InformationenSee Also

Datentypen (Transact-SQL) Data Types (Transact-SQL)
SET-Anweisungen (Transact-SQL) SET Statements (Transact-SQL)
SET ARITHABORT (Transact-SQL)SET ARITHABORT (Transact-SQL)