Megosztás a következőn keresztül:


SET NUMERIC_ROUNDABORT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Megadja a hibajelentés szintjét, amely akkor keletkezik, amikor egy kifejezésben a kerekítés pontosságvesztést okoz.

Transact-SQL szintaxis konvenciók

Szemantika


SET NUMERIC_ROUNDABORT { ON | OFF }

Megjegyzések

Amikor a SET NUMERIC_ROUNDABORT ON, hiba keletkezik, miután egy kifejezésben a pontosság csökken. Ha OFF beállításra állítva, a pontosságvesztés nem generál hibaüzenetet. Az eredményt az oszlop vagy változó pontosságára kerekítik, amely az eredményt tárolja.

A pontosságvesztés akkor következik be, amikor egy fix pontossággal rendelkező értéket próbálsz tárolni egy oszlopban vagy változóban, ahol kevesebb pontossággal van.

Ha a SET NUMERIC_ROUNDABORT ON, akkor az ARITHABORT halmaz határozza meg a generált hiba súlyosságát. Ez a táblázat bemutatja ezeknek a beállításoknak a hatásait, amikor a pontosság csökken.

Setting BEKAPCSOLD NUMERIC_ROUNDABORT INDULJ NUMERIC_ROUNDABORT
ÁLLÍTSD BE AZ ARITHABORT BEKAPCSOLÁST Hiba keletkezik; Nem érkezett eredmény. Nincsenek hibák vagy figyelmeztetések; Az eredmény lekerekítve van.
INDÍTSD EL ARITHABORTOT Figyelmeztetés érkezik; az kifejezés NULL-t ad. Nincsenek hibák vagy figyelmeztetések; Az eredmény lekerekítve van.

A SET NUMERIC_ROUNDABORT beállítása végrehajtási vagy futásidőben van beállítva, nem parze-időben.

A SET NUMERIC_ROUNDABORT KI kell kapcsolva, amikor indexeket hozol létre vagy változtatsz számítási oszlopokon vagy indexelt nézetekben. Ha a SET NUMERIC_ROUNDABORT ON, a következő utasítások azokon a táblázatokban, amelyek indexeik számított oszlopokon vagy indexelt nézeteken vannak, meghibásodnak:

  • KÉSZÍTS
  • Frissítés
  • INSERT
  • töröl

További információért a szükséges SET opció beállításokról indexelt nézetekkel és számolt oszlopokon található indexekkel lásd: Figyelembe vételek a SET állítások használatakor című részben.

A jelenlegi beállítás megtekintéséhez futtasd le a következő lekérdezést:

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

Permissions

A nyilvános szerepkör tagságát igényli.

Példák

A következő példa két értéket mutat be, amelyek négy tizedesszámra pontosak. Hozzáadják és tárolják őket egy változóban, amely két tizedesjegyhez mért pontos. A kifejezések bemutatják a különböző SET NUMERIC_ROUNDABORT és SET ARITHABORT környezetek hatását.

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

Lásd még:

adattípusok (Transact-SQL)
SET-utasítások (Transact-SQL)
ARITHABORT BEÁLLÍTÁSA (Transact-SQL)