SET ANSI_WARNINGS (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 perilaku standar ISO untuk beberapa kondisi kesalahan.
Sintaks
Sintaks untuk kumpulan SQL SQL Server dan tanpa server di Azure Synapse Analytics
SET ANSI_WARNINGS { ON | OFF }
Sintaks untuk Azure Synapse Analytics and Analytics Platform System (PDW)
SET ANSI_WARNINGS ON
Catatan
Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Keterangan
SET ANSI_WARNINGS memengaruhi kondisi berikut:
Saat diatur ke ON, jika nilai null muncul dalam fungsi agregat, seperti SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP, atau COUNT, pesan peringatan dihasilkan. Ketika diatur ke NONAKTIF, tidak ada peringatan yang dikeluarkan.
Ketika diatur ke AKTIF, kesalahan overflow divide-by-zero dan aritmatika menyebabkan pernyataan digulung balik dan pesan kesalahan dihasilkan. Saat diatur ke NONAKTIF, kesalahan luapan divide-by-zero dan aritmatika menyebabkan nilai null dikembalikan. Perilaku di mana kesalahan luapan divide-by-zero atau aritmatika menyebabkan nilai null dikembalikan terjadi jika INSERT atau UPDATE dicoba pada karakter, Unicode, atau kolom biner di mana panjang nilai baru melebihi ukuran maksimum kolom. Jika SET ANSI_WARNINGS AKTIF, INSERT atau UPDATE dibatalkan seperti yang ditentukan oleh standar ISO. Kosong berikutnya diabaikan untuk kolom karakter dan null berikutnya diabaikan untuk kolom biner. Saat NONAKTIF, data dipotok ke ukuran kolom dan pernyataan berhasil.
Catatan
Ketika pemotongan terjadi dalam konversi apa pun ke atau dari data biner atau varbinary , tidak ada peringatan atau kesalahan yang dikeluarkan, terlepas dari opsi SET.
Catatan
ANSI_WARNINGS tidak dihormati saat meneruskan parameter dalam prosedur tersimpan, fungsi yang ditentukan pengguna, atau saat mendeklarasikan dan mengatur variabel dalam pernyataan batch. Misalnya, jika variabel didefinisikan sebagai karakter(3), lalu diatur ke nilai yang lebih besar dari tiga karakter, data dipotong ke ukuran yang ditentukan dan pernyataan INSERT atau UPDATE berhasil.
Anda dapat menggunakan opsi opsi pengguna sp_configure untuk mengatur pengaturan default untuk ANSI_WARNINGS untuk semua koneksi ke server. Untuk informasi selengkapnya, lihat sp_configure (SQL Transact).
ANSI_WARNINGS harus AKTIF saat Anda membuat atau memanipulasi indeks pada kolom komputasi atau tampilan terindeks. Jika SET ANSI_WARNINGS nonaktif, pernyataan CREATE, UPDATE, INSERT, dan DELETE pada tabel dengan indeks pada kolom komputasi atau tampilan terindeks akan gagal. Untuk informasi selengkapnya tentang pengaturan opsi SET yang diperlukan dengan tampilan dan indeks terindeks pada kolom komputasi, lihat "Pertimbangan Saat Anda Menggunakan Pernyataan SET" dalam Pernyataan SET (Transact-SQL).
SQL Server menyertakan opsi database ANSI_WARNINGS. Ini setara dengan SET ANSI_WARNINGS. Saat SET ANSI_WARNINGS AKTIF, kesalahan atau peringatan dimunculkan dalam pembagian per nol, string terlalu besar untuk kolom database, dan kesalahan serupa lainnya. Ketika SET ANSI_WARNINGS NONAKTIF, kesalahan dan peringatan ini tidak dinaikkan. Nilai default dalam database model untuk SET ANSI_WARNINGS NONAKTIF. Jika tidak ditentukan, pengaturan ANSI_WARNINGS berlaku. Jika SET ANSI_WARNINGS NONAKTIF, SQL Server menggunakan nilai kolom is_ansi_warnings_on dalam tampilan katalog sys.databases.
Penting
ANSI_WARNINGS harus diatur ke AKTIF untuk menjalankan kueri terdistribusi.
Klien, seperti driver SQL Server Native Client ODBC, Penyedia SQL Server Native Client OLE DB untuk SQL Server, dan Driver Microsoft JDBC untuk SQL Server secara otomatis mengatur ANSI_WARNINGS ke AKTIF dengan bendera koneksi. Ini dapat dikonfigurasi dalam sumber data ODBC, dalam atribut koneksi ODBC, yang diatur dalam aplikasi sebelum menyambungkan. Default untuk SET ANSI_WARNINGS NONAKTIF untuk koneksi dari aplikasi DB-Library. Untuk informasi tambahan, lihat LOGIN7 di spesifikasi protokol Tabular Data Stream (TDS).
Saat ANSI_DEFAULTS AKTIF, ANSI_WARNINGS diaktifkan.
Pengaturan ANSI_WARNINGS didefinisikan pada waktu eksekusi atau run time dan bukan pada waktu penguraian.
Jika SET ARITHABORT atau SET ARITHIGNORE NONAKTIF dan SET ANSI_WARNINGS AKTIF, SQL Server masih mengembalikan pesan kesalahan saat mengalami kesalahan bagi-demi-nol atau luapan.
Untuk menampilkan pengaturan saat ini untuk pengaturan ini, jalankan kueri berikut.
DECLARE @ANSI_WARN VARCHAR(3) = 'OFF';
IF ( (8 & @@OPTIONS) = 8 ) SET @ANSI_WARN = 'ON';
SELECT @ANSI_WARN AS ANSI_WARNINGS;
Izin
Membutuhkan keanggotaan dalam peran publik .
Contoh
Contoh berikut menunjukkan tiga situasi yang sebelumnya disebutkan, dengan SET ANSI_WARNINGS ke AKTIF dan NONAKTIF.
CREATE TABLE T1
(
a int,
b int NULL,
c varchar(20)
);
GO
SET NOCOUNT ON;
INSERT INTO T1
VALUES (1, NULL, '')
,(1, 0, '')
,(2, 1, '')
,(2, 2, '');
SET NOCOUNT OFF;
GO
Sekarang atur ANSI_WARNINGS ke AKTIF dan uji.
PRINT '**** Setting ANSI_WARNINGS ON';
GO
SET ANSI_WARNINGS ON;
GO
PRINT 'Testing NULL in aggregate';
GO
SELECT a, SUM(b)
FROM T1
GROUP BY a;
GO
PRINT 'Testing String Overflow in INSERT';
GO
INSERT INTO T1
VALUES (3, 3, 'Text string longer than 20 characters');
GO
PRINT 'Testing Divide by zero';
GO
SELECT a / b AS ab
FROM T1;
GO
Sekarang atur ANSI_WARNINGS ke NONAKTIF dan uji.
PRINT '**** Setting ANSI_WARNINGS OFF';
GO
SET ANSI_WARNINGS OFF;
GO
PRINT 'Testing NULL in aggregate';
GO
SELECT a, SUM(b)
FROM T1
GROUP BY a;
GO
PRINT 'Testing String Overflow in INSERT';
GO
INSERT INTO T1
VALUES (4, 4, 'Text string longer than 20 characters');
GO
SELECT a, b, c
FROM T1
WHERE a = 4;
GO
PRINT 'Testing Divide by zero';
GO
SELECT a / b AS ab
FROM T1;
GO
DROP TABLE T1;
Lihat juga
INSERT (Transact-SQL)
SELECT (Transact-SQL)
Pernyataan SET (transact-SQL)
SET ANSI_DEFAULTS (SQL Bertransaksi)
SESSIONPROPERTY (transact-SQL)
