Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Analyseendpunkt in Microsoft Fabric
Lagerhaus in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric
Gibt an, welche Fehlerberichtsstufe generiert wird, wenn beim Runden in einem Ausdruck Genauigkeitsverluste entstehen.
Transact-SQL-Syntaxkonventionen
Syntax
SET NUMERIC_ROUNDABORT { ON | OFF }
Hinweise
Wenn SET NUMERIC_ROUNDABORT ON ist, entsteht ein Fehler, nachdem ein Präzisionsverlust in einem Ausdruck auftritt. Wenn OFF festgelegt ist, werden keine Fehlermeldungen generiert, wenn ein Genauigkeitsverlust auftritt. Das Ergebnis wird auf die Genauigkeit der Spalte oder Variable gerundet, die das Ergebnis speichert.
Ein Genauigkeitsverlust entsteht, wenn Sie versuchen einen Wert mit fester Genauigkeit in einer Spalte oder Variablen mit geringerer Genauigkeit zu speichern.
Wenn SETSET NUMERIC_ROUNDABORT AN ist, SET ARITHABORT bestimmt die Schwere des erzeugten Fehlers. Die folgende Tabelle zeigt die Auswirkungen dieser beiden Einstellungen im Falle eines Genauigkeitsverlusts.
| Einstellung | SET NUMERIC_ROUNDABORT ON | SET NUMERIC_ROUNDABORT AUS |
|---|---|---|
| SET SET ARITHABORT ON | Fehler wird generiert; es werden keine Ergebnisse zurückgegeben. | Keine Fehler oder Warnungen, Ergebnis wird gerundet. |
| SET SET ARITHABORT OFF | Warnung wird zurückgegeben; Ausdruck gibt NULL zurück. | Keine Fehler oder Warnungen, Ergebnis wird gerundet. |
Die Einstellung wird SET NUMERIC_ROUNDABORT zur Ausführung oder Laufzeit und nicht zur Analysezeit festgelegt.
SET NUMERIC_ROUNDABORT muss AUS sein, wenn du Indizes auf berechneten Spalten oder indexierten Ansichten erstellst oder änderst. Ist SET NUMERIC_ROUNDABORT ON, so versagen folgende Anweisungen auf Tabellen mit Indizes auf berechneten Spalten oder indexierten Ansichten:
- CREATE
- UPDATE
- INSERT
- DELETE
Weitere Informationen zu den erforderlichen SET Optionseinstellungen mit indexierten Ansichten und Indizes auf berechneten Spalten finden Sie unter Überlegungen bei der Verwendung der SET Statements.
Um die aktuelle Einstellung anzuzeigen, führen Sie die folgende Abfrage aus:
DECLARE @NUMERIC_ROUNDABORT VARCHAR(3) = 'OFF';
IF ( (8192 & @@OPTIONS) = 8192 ) SET @NUMERIC_ROUNDABORT = 'ON';
SELECT @NUMERIC_ROUNDABORT AS NUMERIC_ROUNDABORT;
Berechtigungen
Erfordert die Mitgliedschaft in der public -Rolle.
Beispiele
Im folgenden Beispiel werden zwei Werte gezeigt, die auf vier Dezimalstellen genau sind. Diese werden zu einer Variablen hinzugefügt und in dieser gespeichert, die auf zwei Dezimalstellen genau ist. Die Ausdrücke zeigen die Auswirkungen der unterschiedlichen SET NUMERIC_ROUNDABORT- und SET ARITHABORT-Einstellungen.
-- 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 Informationen
Datentypen (Transact-SQL)
SET Anweisungen (Transact-SQL)
SET
SET ARITHABORT (Transact-SQL)