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 ON is, ontstaat er een fout nadat er een verlies van precisie in een expressie is opgetreden. 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 SETSET NUMERIC_ROUNDABORT AAN is, SET ARITHABORT bepaalt de ernst van de gegenereerde fout. Deze tabel toont de effecten van deze twee instellingen wanneer er sprake is van verlies van precisie.
| Configuratie | SET NUMERIC_ROUNDABORT OP | SET NUMERIC_ROUNDABORT OFF |
|---|---|---|
| SET SET ARITHABORT OP | Er wordt fout gegenereerd; Geen resultaten teruggegeven. | Geen fouten of waarschuwingen; het resultaat wordt afgerond. |
| SET SET ARITHABORT OFF | Waarschuwing wordt teruggegeven; expressie geeft NULL terug. | Geen fouten of waarschuwingen; het resultaat wordt afgerond. |
De instelling van SET NUMERIC_ROUNDABORT wordt ingesteld bij uitvoering of uitvoeringstijd en niet op parseringstijd.
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 views:
- CREËREN
- UPDATE
- INSERT
- DELETE
Voor meer informatie over de vereiste SET optie-instellingen met geïndexeerde weergaven en indexen op berekende kolommen, zie Overwegingen bij het gebruik van de SET stellingen.
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
SET ARITHABORT (Transact-SQL)