Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-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)