STÄLL NUMERIC_ROUNDABORT (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

Specificerar nivån av felrapportering som genereras när avrundning i ett uttryck orsakar förlust av precision.

Transact-SQL syntaxkonventioner

Syntax


SET NUMERIC_ROUNDABORT { ON | OFF }

Anmärkningar

När SET NUMERIC_ROUNDABORT är ON genereras ett fel efter att en förlust av precision inträffat i ett uttryck. Om det är satt till AV, genererar förluster av precision inga felmeddelanden. Resultatet avrundas till precisionen hos kolumnen eller variabeln som lagrar resultatet.

Förlust av precision uppstår när du försöker lagra ett värde med fast precision i en kolumn eller variabel med lägre precision.

Om SET NUMERIC_ROUNDABORT är PÅ, bestämmer set ARITHABORT hur allvarligt det genererade felet är. Denna tabell visar effekterna av dessa två inställningar när en förlust av precision inträffar.

Inställning SÄTT NUMERIC_ROUNDABORT PÅ SÄTT NUMERIC_ROUNDABORT IGÅNG
SÄTT PÅ ARITHABORT Fel genereras; Inga resultat har återkommit. Inga fel eller varningar; resultatet avrundas.
SÄTT IGÅNG ARITHABORT Varningen återgår; uttrycket returnerar NULL. Inga fel eller varningar; resultatet avrundas.

Inställningen för SET NUMERIC_ROUNDABORT sätts vid exekverings- eller körningstid och inte vid parsetid.

SET NUMERIC_ROUNDABORT måste vara AV när du skapar eller ändrar index på beräknade kolumner eller indexerade vyer. Om SET NUMERIC_ROUNDABORT är ON misslyckas följande satser i tabeller med index på beräknade kolumner eller indexerade vyer:

  • CREATE
  • UPPDATERING
  • INSERT
  • DELETE

För mer information om nödvändiga inställningar för SET-alternativ med indexerade vyer och index på beräknade kolumner, se Överväganden när du använder SET-satserna.

För att se den aktuella inställningen för denna inställning, kör följande fråga:

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

Permissions

Kräver medlemskap i offentlig roll.

Examples

Följande exempel visar två värden som är precisa till fyra decimaler. De läggs till och lagras i en variabel som är exakt med två decimaler. Uttrycken visar effekterna av skillnaderna SET NUMERIC_ROUNDABORT och SET ARITHABORT miljöerna.

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

Se även

Datatyper (Transact-SQL)
SET-instruktioner (Transact-SQL)
ANGE ARITHABORT (Transact-SQL)