Udostępnij za pomocą


ZESTAW NUMERIC_ROUNDABORT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Określa poziom raportowania błędów generowany, gdy zaokrąglenie w wyrażeniu powoduje utratę precyzji.

Transact-SQL konwencje składni

Składnia


SET NUMERIC_ROUNDABORT { ON | OFF }

Uwagi

Gdy SET NUMERIC_ROUNDABORT jest WŁĄCZONY, po utracie precyzji w wyrażeniu generowany jest błąd. Jeśli ustawisz WYŁĄCZONE, utrata precyzji nie generuje komunikatów o błędach. Wynik jest zaokrąglany do precyzji kolumny lub zmiennej przechowującej wynik.

Utrata precyzji następuje, gdy próbujesz zapisać wartość o stałej precyzji w kolumnie lub zmiennej z mniejszą precyzją.

Jeśli USTAW NUMERIC_ROUNDABORT jest WŁĄCZONE, ZESTAW ARYTMACJA określa stopień wygenerowanego błędu. Ta tabela pokazuje skutki tych dwóch ustawień w przypadku utraty precyzji.

Setting USTAW NUMERIC_ROUNDABORT NA RUSZ NUMERIC_ROUNDABORT
WŁĄCZ ARITHABORT Generowany jest błąd; Nie otrzymałem żadnych wyników. Brak błędów ani ostrzeżeń; Wynik jest zaokrąglony.
URUCHOM ARYTMUS Ostrzeżenie zostało odwzajemnione; wyrażenie zwraca NULL. Brak błędów ani ostrzeżeń; Wynik jest zaokrąglony.

Ustawienie SET NUMERIC_ROUNDABORT jest ustawiane w czasie wykonywania lub działania, a nie podczas parsowania.

USTAW NUMERIC_ROUNDABORT musi być WYŁĄCZONY, gdy tworzysz lub zmieniasz indeksy w kolumnach obliczeniowych lub widokach indeksowanych. Jeśli SET NUMERIC_ROUNDABORT jest WŁĄCZONY, następujące instrukcje dotyczące tabel z indeksami na kolumnach obliczeniowych lub indeksowanych widokach zawodzą:

  • CREATE
  • Aktualizacja
  • INSERT
  • USUŃ

Aby uzyskać więcej informacji o wymaganych ustawieniach opcji SET z indeksowanymi widokami i indeksami w kolumnach obliczeniowych, zobacz Rozważania przy użyciu instrukcji SET.

Aby zobaczyć aktualne ustawienie dla tego ustawienia, wykonaj następujące zapytanie:

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

Permissions

Wymaga członkostwa w publicznej roli .

Przykłady

Poniższy przykład pokazuje dwie wartości precyzyjne do czterech miejsc po przecinku. Są dodawane i przechowywane w zmiennej precyzyjnej co dwa miejsca po przecinku. Wyrazy pokazują efekty różnych SET NUMERIC_ROUNDABORTSET ARITHABORT i środowisk.

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

Zobacz też

typy danych (Transact-SQL)
INSTRUKCJE SET (Transact-SQL)
USTAW ARITHABORT (Transact-SQL)