Delen via


SET NUMERIC_ROUNDABORT (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric

Specificeert het niveau van foutrapportage dat wordt gegenereerd wanneer afronden in een expressie een verlies van precisie veroorzaakt.

Transact-SQL syntaxis-conventies

Syntaxis


SET NUMERIC_ROUNDABORT { ON | OFF }

Opmerkingen

Wanneer SET NUMERIC_ROUNDABORT AAN is, wordt er een fout gegenereerd nadat er sprake is van een precisieverlies in een expressie. Als het op UIT staat, veroorzaken precisieverliezen geen foutmeldingen. Het resultaat wordt afgerond tot de precisie van de kolom of variabele die het resultaat opslaat.

Verlies aan precisie treedt op wanneer je probeert een waarde met vaste precisie op te slaan in een kolom of variabele met minder precisie.

Als SET NUMERIC_ROUNDABORT AAN STAAT, bepaalt set ARITHABORT de ernst van de gegenereerde fout. Deze tabel toont de effecten van deze twee instellingen wanneer er sprake is van verlies van precisie.

Configuratie ZET NUMERIC_ROUNDABORT AAN ZET NUMERIC_ROUNDABORT OP GANG
ZET ARITHABORT AAN Er wordt fout gegenereerd; Geen resultaten teruggegeven. Geen fouten of waarschuwingen; het resultaat wordt afgerond.
ZET ARITHABORT LOS Waarschuwing wordt teruggegeven; expressie geeft NULL terug. Geen fouten of waarschuwingen; het resultaat wordt afgerond.

De instelling van SET NUMERIC_ROUNDABORT wordt ingesteld tijdens execute- of runtime en niet tijdens parsetijd.

SET NUMERIC_ROUNDABORT moet UIT staan wanneer je indexen maakt of verandert op berekende kolommen of geïndexeerde weergaven. Als SET NUMERIC_ROUNDABORT ON is, falen de volgende statements op tabellen met indexen op berekende kolommen of geïndexeerde weergaven:

  • CREËREN
  • UPDATE
  • INSERT
  • Verwijderen

Voor meer informatie over de vereiste SET-opties met geïndexeerde weergaven en indexen op berekende kolommen, zie Overwegingen Wanneer u de SET-instructies gebruikt.

Om de huidige instelling voor deze instelling te bekijken, voer je de volgende zoekopdracht uit:

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

Permissions

Vereist lidmaatschap van de openbare rol.

Voorbeelden

Het volgende voorbeeld toont twee waarden die precies zijn tot op vier decimalen. Ze worden toegevoegd en opgeslagen in een variabele die precies is tot op twee decimalen. De uitdrukkingen tonen de effecten van de verschillen SET NUMERIC_ROUNDABORT en SET ARITHABORT de omgevingen.

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

Zie ook

gegevenstypen (Transact-SQL)
SET-instructies (Transact-SQL)
SET ARITHABORT (Transact-SQL)