SET NUMERIC_ROUNDABORT (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Menentukan tingkat pelaporan kesalahan yang dihasilkan saat pembulatan dalam ekspresi menyebabkan hilangnya presisi.

Konvensi sintaks transact-SQL

Sintaksis


SET NUMERIC_ROUNDABORT { ON | OFF }

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Keterangan

Saat SET NUMERIC_ROUNDABORT AKTIF, kesalahan dihasilkan setelah hilangnya presisi terjadi dalam ekspresi. Jika diatur ke NONAKTIF, kehilangan presisi tidak menghasilkan pesan kesalahan. Hasilnya dibulatkan ke presisi kolom atau variabel yang menyimpan hasilnya.

Hilangnya presisi terjadi ketika Anda mencoba menyimpan nilai dengan presisi tetap dalam kolom atau variabel dengan presisi yang lebih sedikit.

Jika SET NUMERIC_ROUNDABORT AKTIF, SET ARITHABORT menentukan tingkat keparahan kesalahan yang dihasilkan. Tabel ini menunjukkan efek dari kedua pengaturan ini ketika hilangnya presisi terjadi.

Pengaturan SET NUMERIC_ROUNDABORT AKTIF SET NUMERIC_ROUNDABORT NONAKTIF
SET ARITHABORT AKTIF Kesalahan dihasilkan; tidak ada set hasil yang dikembalikan. Tidak ada kesalahan atau peringatan; hasil dibulatkan.
ATUR ARITHABORT NONAKTIF Peringatan dikembalikan; ekspresi mengembalikan NULL. Tidak ada kesalahan atau peringatan; hasil dibulatkan.

Pengaturan SET NUMERIC_ROUNDABORT diatur pada waktu eksekusi atau run time dan bukan pada waktu penguraian.

SET NUMERIC_ROUNDABORT harus NONAKTIF saat Anda membuat atau mengubah indeks pada kolom komputasi atau tampilan terindeks. Jika SET NUMERIC_ROUNDABORT AKTIF, pernyataan berikut pada tabel dengan indeks pada kolom komputasi atau tampilan terindeks gagal:

  • CREATE
  • UPDATE
  • INSERT
  • DELETE

Untuk informasi selengkapnya tentang pengaturan opsi SET yang diperlukan dengan tampilan dan indeks terindeks pada kolom komputasi, lihat Pertimbangan Saat Anda Menggunakan Pernyataan SET.

Untuk menampilkan pengaturan saat ini untuk pengaturan ini, jalankan kueri berikut:

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

Izin

Memerlukan keanggotaan dalam peran publik .

Contoh

Contoh berikut menunjukkan dua nilai yang tepat untuk empat tempat desimal. Mereka ditambahkan dan disimpan dalam variabel yang tepat untuk dua tempat desimal. Ekspresi menunjukkan efek dari pengaturan dan SET ARITHABORT yang berbedaSET NUMERIC_ROUNDABORT.

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

Lihat Juga

Tipe Data (Transact-SQL)
Pernyataan SET (Transact-SQL)
SET ARITHABORT (Transact-SQL)