SET NUMERIC_ROUNDABORT (SQL Bertransaksi)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

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

Article link iconKonvensi Sintaksis T-SQL

Sintaks


SET NUMERIC_ROUNDABORT { ON | OFF }

Catatan

Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan 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 memperlihatkan 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 eksekusi 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
  • HAPUS

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

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

Izin

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