Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-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)