Bagikan melalui


SET NUMERIC_ROUNDABORT (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric

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

Konvensi sintaks transact-SQL

Sintaks


SET NUMERIC_ROUNDABORT { ON | OFF }

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)