SET NUMERIC_ROUNDABORT (SQL Bertransaksi)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Menentukan tingkat pelaporan kesalahan yang dihasilkan saat membulatkan dalam ekspresi menyebabkan hilangnya presisi.
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)
