Udostępnij za pośrednictwem


ZESTAW NUMERIC_ROUNDABORT (Transact-SQL)

Określa poziom wysyłania raportów o błędach wygenerowanych zaokrąglania w wyrażenie powoduje utratę precyzji.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

SET NUMERIC_ROUNDABORT { ON | OFF } 

Uwagi

Gdy ustawienie NUMERIC_ROUNDABORT jest włączone, zostanie wygenerowany błąd, po wystąpieniu utratę precyzji w wyrażenie.OFF, nie generują straty precision jest zaokrąglana komunikaty o błędach i wynik precyzji kolumna lub zmiennej przechowywanie wyników.

Utratę precyzji występuje, gdy próby przechowywania wartości, z dokładnością do środka w kolumna lub zmiennej z mniejszą dokładnooć.

Jeśli ustawienie NUMERIC_ROUNDABORT jest włączone, ustawienie ARITHABORT określa ważności wygenerowany błąd.W tej tabela przedstawiono efekty te dwa ustawienia po wystąpieniu utratę precyzji.

Ustawienie

SET NUMERIC_ROUNDABORT ON

ZESTAW NUMERIC_ROUNDABORT, WYŁĄCZANIE

SET ARITHABORT ON

Zostanie wygenerowany błąd; nie zestaw wyników zwrócone.

Nie błędy lub ostrzeżenia; wynik jest zaokrąglany.

ZESTAW ARITHABORT, WYŁĄCZANIE

Ostrzeżenie jest zwracany; wyrażenie zwraca wartość NULL.

Nie błędy lub ostrzeżenia; wynik jest zaokrąglany.

Ustawienie ustawianie NUMERIC_ROUNDABORT jest zestaw na wykonać lub czas jednostkowy i nie analizować czas.

Ustaw NUMERIC_ROUNDABORT musi być wyłączona podczas tworzenia lub zmieniania indeksów dla kolumny obliczanej lub widoki indeksowane.Jeśli ustawienie NUMERIC_ROUNDABORT jest włączone, instrukcji CREATE, UPDATE, INSERT i DELETE na tabelach z indeksów dla kolumny obliczanej lub widoki indeksowane nie powiedzie się.Aby uzyskać więcej informacji o wymagane ustawienia opcji zestaw Widoki indeksowane i indeksy kolumny obliczane zobacz "Zagadnienia podczas możesz użycia zestawu sprawozdań" in ZESTAW instrukcji (Transact-SQL).

Uprawnienia

Wymaga członkostwa w public rolę.

Przykłady

Poniższy przykład przedstawia dwie wartości z dokładnością do czterech miejsc dziesiętnych, które są dodawane i przechowywane w zmiennej z dokładnością do dwóch miejsc dziesiętnych.Wyrażenia wykazać wpływ różnych SET NUMERIC_ROUNDABORT i SET ARITHABORT Ustawienia.

-- 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