Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Mengakhiri kueri saat terjadi kesalahan luapan atau membagi berdasarkan nol selama eksekusi kueri.
Sintaks
Sintaks untuk SQL Server, kumpulan SQL tanpa server di Azure Synapse Analytics, Microsoft Fabric
SET ARITHABORT { ON | OFF }
Sintaks untuk Azure Synapse Analytics dan Analytics Platform System (PDW)
SET ARITHABORT ON
Keterangan
Selalu atur ARITHABORT ke AKTIF dalam sesi masuk Anda. Pengaturan ARITHABORT ke NONAKTIF dapat berdampak negatif pada pengoptimalan kueri, yang menyebabkan masalah performa.
Peringatan
Pengaturan default ARITHABORT untuk SQL Server Management Studio adalah AKTIF. Pengaturan ARITHABORT aplikasi klien ke OFF mungkin menerima rencana kueri yang berbeda, sehingga sulit untuk memecahkan masalah kueri yang berkinerja buruk. Artinya, kueri yang sama mungkin dijalankan dengan cepat di studio manajemen tetapi lambat dalam aplikasi. Saat memecahkan masalah kueri dengan Management Studio, selalu cocokkan setelan klien ARITHABORT .
Saat SET ARITHABORT dan SET ANSI WARNINGS AKTIF, kondisi kesalahan ini menyebabkan kueri berakhir.
Saat SET ARITHABORT ON dan SET ANSI WARNINGS OFF, kondisi kesalahan ini menyebabkan batch berakhir. Jika kesalahan terjadi dalam transaksi, transaksi akan digulung balik. Ketika SETSET ARITHABORT OFF dan salah satu kesalahan ini terjadi, pesan peringatan muncul dan hasil operasi aritmatika adalah NULL.
Jika SET ARITHABORT dan SET ANSI WARNINGS OFF dan salah satu kesalahan ini terjadi, pesan peringatan muncul, dan hasil operasi aritmatika adalah NULL.
Catatan
Jika tidak SET ARITHABORT aktif atau SETSET ARITHIGNORE tidak aktif, SQL Server kembali NULL dan pesan peringatan muncul setelah kueri berjalan.
Ketika ANSI_WARNINGS memiliki nilai ON dan tingkat kompatibilitas database diatur ke 90 atau lebih tinggi maka ARITHABORT secara implisit ON terlepas dari pengaturan nilainya. Jika tingkat kompatibilitas database diatur ke 80 atau lebih lama, opsi harus ARITHABORT diatur secara eksplisit ke ON.
Untuk evaluasi ekspresi, jika SET ARITHABORT OFF dan INSERTpernyataan , UPDATE, atau DELETE menemukan kesalahan aritmatika, overflow, divide-by-zero, atau domain, SQL Server menyisipkan atau memperbarui NULL nilai. Jika kolom target tidak dapat diubah ke null, tindakan sisipkan atau perbarui gagal dan pengguna melihat kesalahan.
Saat salah satu SET ARITHABORT atau SETSET ARITHIGNORE MATI dan SETSET ANSI_WARNINGS AKTIF, SQL Server masih mengembalikan pesan kesalahan saat mengalami kesalahan divide-by-zero atau overflow.
Ketika SETSET ARITHABORT OFF dan kesalahan pembatalan terjadi selama evaluasi kondisi Boolean dari pernyataan IF, cabang FALSE dieksekusi.
SET SET ARITHABORT harus AKTIF saat Anda membuat atau mengubah indeks pada kolom komputasi atau tampilan yang diindeks. Jika SET ARITHABORT OFF, CREATE, UPDATE, , INSERTdan DELETE pernyataan pada tabel dengan indeks pada kolom yang dihitung atau tampilan yang diindeks gagal.
Pengaturan terjadi SETSET ARITHABORT pada waktu eksekusi atau eksekusi dan bukan pada waktu penguraian.
SET SET ARITHABORTOFF tidak didukung di kumpulan SQL khusus Azure Synapse Analytics.
Untuk melihat pengaturan saat ini untuk SETSET ARITHABORT, jalankan kueri berikut:
DECLARE @ARITHABORT VARCHAR(3) = 'OFF';
IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON';
SELECT @ARITHABORT AS ARITHABORT;
Izin
Memerlukan keanggotaan dalam peran publik .
Contoh
Contoh berikut menunjukkan kesalahan bagi-demi-nol dan luapan yang memiliki SET ARITHABORT pengaturan.
-- SET ARITHABORT
-------------------------------------------------------------------------------
-- Create tables t1 and t2 and insert data values.
CREATE TABLE t1 (
a TINYINT,
b TINYINT
);
CREATE TABLE t2 (
a TINYINT
);
GO
INSERT INTO t1
VALUES (1, 0);
INSERT INTO t1
VALUES (255, 1);
GO
PRINT '*** SET ARITHABORT ON';
GO
-- SET ARITHABORT ON and testing.
SET ARITHABORT ON;
GO
PRINT '*** Testing divide by zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing divide by zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
GO
PRINT '*** Resulting data - should be no data';
GO
SELECT *
FROM t2;
GO
-- Truncate table t2.
TRUNCATE TABLE t2;
GO
-- SET ARITHABORT OFF and testing.
PRINT '*** SET ARITHABORT OFF';
GO
SET ARITHABORT OFF;
GO
-- This works properly.
PRINT '*** Testing divide by zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
GO
-- This works as if SET ARITHABORT was ON.
PRINT '*** Testing divide by zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
GO
PRINT '*** Resulting data - should be 0 rows';
GO
SELECT *
FROM t2;
GO
-- Drop tables t1 and t2.
DROP TABLE t1;
DROP TABLE t2;
GO