SET ANSI_WARNINGS (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistem Platform Analitik (PDW)Titik akhir analitik SQL di Microsoft FabricGudang di Microsoft FabricDatabase SQL di Microsoft Fabric

Menentukan perilaku standar ISO untuk beberapa kondisi kesalahan.

Konvensi sintaks transact-SQL

Sintaks

Sintaks untuk SQL Server, kumpulan SQL tanpa server di Azure Synapse Analytics, Microsoft Fabric

SET ANSI_WARNINGS { ON | OFF }

Sintaks untuk Azure Synapse Analytics dan Analytics Platform System (PDW)

SET ANSI_WARNINGS ON

Keterangan

SET ANSI_WARNINGS mempengaruhi 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. Saat 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 membagi berdasarkan nol dan luapan aritmatika menyebabkan nilai null dikembalikan. Perilaku di mana kesalahan divide-by-zero atau arithmetic overflow menyebabkan nilai null ditampilkan terjadi jika atau INSERTUPDATE dicoba pada karakter, Unicode, atau kolom biner di mana panjang nilai baru melebihi ukuran maksimum kolom. Jika SETSET ANSI_WARNINGS ON, atau UPDATE dibatalkan INSERT sebagaimana ditentukan oleh standar ISO. Kosong berikutnya diabaikan untuk kolom karakter dan null berikutnya diabaikan untuk kolom biner. Saat NONAKTIF, data dipotong ke ukuran kolom dan pernyataan berhasil.

Catatan

Ketika pemotongan terjadi dalam konversi apa pun ke atau dari data biner atau varbiner , tidak ada peringatan atau kesalahan yang dikeluarkan, terlepas dari SET opsinya.

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 char(3), lalu diatur ke nilai yang lebih besar dari tiga karakter, data dipotong sesuai ukuran yang ditentukan, dan pernyataan INSERT atau UPDATE berhasil dieksekusi.

Anda dapat menggunakan opsi sp_configure opsi pengguna untuk mengatur pengaturan default untuk ANSI_WARNINGS semua koneksi ke server. Untuk informasi selengkapnya, lihat sp_configure (Transact-SQL).

ANSI_WARNINGS harus AKTIF saat Anda membuat atau memanipulasi indeks pada kolom komputasi atau tampilan yang diindeks. Jika SETSET ANSI_WARNINGS OFF, CREATE, UPDATE, INSERT, dan DELETE pernyataan pada tabel dengan indeks pada kolom yang dihitung atau tampilan yang diindeks akan gagal. Untuk informasi selengkapnya tentang pengaturan opsi yang diperlukan SET dengan tampilan dan indeks yang diindeks pada kolom yang dihitung, lihat "Pertimbangan Saat Anda Menggunakan SET Pernyataan" di SET Pernyataan (Transact-SQL).

SQL Server menyertakan ANSI_WARNINGS opsi database. Ini setara dengan SET ANSI_WARNINGS. Saat SET ANSI_WARNINGS AKTIF, kesalahan atau peringatan dimunculkan dalam divide-by-zero, string terlalu besar untuk kolom database, dan kesalahan serupa lainnya. Saat SET ANSI_WARNINGS NONAKTIF, kesalahan dan peringatan ini tidak muncul. Nilai default dalam model database for adalah SET ANSI_WARNINGS OFF. Jika tidak ditentukan, pengaturan berlaku ANSI_WARNINGS . 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 ODBC Klien Asli SQL Server, Penyedia OLE DB Klien Asli SQL Server untuk SQL Server, dan Driver Microsoft JDBC untuk SQL Server secara otomatis diatur ANSI_WARNINGS ke AKTIF dengan bendera koneksi. Ini dapat dikonfigurasi di sumber data ODBC, dalam atribut koneksi ODBC, diatur dalam aplikasi sebelum menyambungkan. Default untuk SET ANSI_WARNINGS adalah MATI untuk koneksi dari aplikasi DB-Library. Untuk informasi tambahan, lihat LOGIN7 dalam spesifikasi protokol Aliran Data Tabular (TDS).

Ketika ANSI_DEFAULTS AKTIF, ANSI_WARNINGS diaktifkan.

Pengaturan ANSI_WARNINGS didefinisikan pada waktu eksekusi atau eksekusi dan bukan pada waktu penguraian. Seperti semua SET Pernyataan, SET ANSI_WARNINGS memengaruhi sesi saat ini.

Jika 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.

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

Memerlukan keanggotaan dalam peran publik .

Contoh

Contoh berikut menunjukkan tiga situasi yang disebutkan sebelumnya, 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 ON 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 OFF 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;