SET ANSI_NULLS (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 yang sesuai dengan ISO dari operator perbandingan Equals (=) dan Not Equal To (<>) saat digunakan dengan nilai null dalam SQL Server.
Sintaks
Sintaks untuk kumpulan SQL SQL Server dan tanpa server di Azure Synapse Analytics
SET ANSI_NULLS { ON | OFF }
Sintaks untuk Azure Synapse Analytics and Analytics Platform System (PDW)
SET ANSI_NULLS ON
Catatan
Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Keterangan
Saat ANSI_NULLS AKTIF, pernyataan SELECT yang menggunakan WHERE column_name = NULL mengembalikan nol baris meskipun ada nilai null dalam column_name. Pernyataan SELECT yang menggunakan WHERE column_name<>NULL mengembalikan nol baris meskipun ada nilai nonnull dalam column_name.
Saat ANSI_NULLS NONAKTIF, operator perbandingan Equals (=) dan Not Equal To (<>) tidak mengikuti standar ISO. Pernyataan SELECT yang menggunakan WHERE column_name = NULL mengembalikan baris yang memiliki nilai null dalam column_name. Pernyataan SELECT yang menggunakan WHERE column_name<>NULL mengembalikan baris yang memiliki nilai nonnull dalam kolom. Selain itu, pernyataan SELECT yang menggunakan WHERE column_name<>XYZ_value mengembalikan semua baris yang tidak XYZ_value dan yang bukan NULL.
Saat ANSI_NULLS AKTIF, semua perbandingan terhadap nilai null dievaluasi ke UNKNOWN. Saat SET ANSI_NULLS NONAKTIF, perbandingan semua data dengan nilai null dievaluasi ke TRUE jika nilai data ADALAH NULL. Jika SET ANSI_NULLS tidak ditentukan, pengaturan opsi ANSI_NULLS database saat ini berlaku. Untuk informasi selengkapnya tentang opsi database ANSI_NULLS, lihat MENGUBAH DATABASE (Transact-SQL).
Tabel berikut ini memperlihatkan bagaimana pengaturan ANSI_NULLS memengaruhi hasil sejumlah ekspresi Boolean menggunakan nilai null dan non-null.
| Ekspresi Boolean | ATUR ANSI_NULLS AKTIF | SET ANSI_NULLS NONAKTIF |
|---|---|---|
| NULL = NULL | UNKNOWN | TRUE |
| 1 = NULL | UNKNOWN | SALAH |
| NULL <> NULL | UNKNOWN | SALAH |
| 1 <> NULL | UNKNOWN | TRUE |
| NULL > NULL | UNKNOWN | UNKNOWN |
| 1 > NULL | UNKNOWN | UNKNOWN |
| NULL IS NULL | TRUE | TRUE |
| 1 NULL | SALAH | SALAH |
| NULL BUKAN NULL | SALAH | SALAH |
| 1 TIDAK NULL | TRUE | TRUE |
SET ANSI_NULLS ON memengaruhi perbandingan hanya jika salah satu pengoperasi perbandingan adalah variabel yang NULL atau NULL harfiah. Jika kedua sisi perbandingan adalah kolom atau ekspresi campuran, pengaturan tidak memengaruhi perbandingan.
Agar skrip berfungsi seperti yang dimaksudkan, terlepas dari opsi database ANSI_NULLS atau pengaturan SET ANSI_NULLS, gunakan IS NULL dan IS NOT NULL dalam perbandingan yang mungkin berisi nilai null.
ANSI_NULLS harus diatur ke AKTIF untuk menjalankan kueri terdistribusi.
ANSI_NULLS juga harus AKTIF saat Anda membuat atau mengubah indeks pada kolom komputasi atau tampilan terindeks. Jika SET ANSI_NULLS NONAKTIF, pernyataan CREATE, UPDATE, INSERT, dan DELETE apa pun pada tabel dengan indeks pada kolom komputasi atau tampilan terindeks akan gagal. SQL Server mengembalikan kesalahan yang mencantumkan semua opsi SET yang melanggar nilai yang diperlukan. Selain itu, saat Anda menjalankan pernyataan SELECT, jika SET ANSI_NULLS NONAKTIF, SQL Server mengabaikan nilai indeks pada kolom atau tampilan yang dihitung dan menyelesaikan operasi pilih seolah-olah tidak ada indeks tersebut pada tabel atau tampilan.
Catatan
ANSI_NULLS adalah salah satu dari tujuh opsi SET yang harus diatur ke nilai yang diperlukan saat berhadapan dengan indeks pada kolom komputasi atau tampilan terindeks. Opsi ANSI_PADDING, , ANSI_WARNINGS, ARITHABORTQUOTED_IDENTIFIER, dan CONCAT_NULL_YIELDS_NULL juga harus diatur ke AKTIF, dan NUMERIC_ROUNDABORT harus diatur ke NONAKTIF.
Driver SQL Server Native Client ODBC dan Penyedia OLE DB SQL Server Native Client untuk SQL Server secara otomatis mengatur ANSI_NULLS ke AKTIF saat menyambungkan. Pengaturan ini dapat dikonfigurasi di sumber data ODBC, dalam atribut koneksi ODBC, atau di properti koneksi OLE DB yang diatur dalam aplikasi sebelum menyambungkan ke instans SQL Server. Default untuk SET ANSI_NULLS NONAKTIF.
Saat ANSI_DEFAULTS AKTIF, ANSI_NULLS diaktifkan.
Pengaturan ANSI_NULLS didefinisikan pada waktu eksekusi atau run time dan bukan pada waktu penguraian.
Untuk menampilkan pengaturan saat ini untuk pengaturan ini, jalankan kueri berikut:
DECLARE @ANSI_NULLS VARCHAR(3) = 'OFF';
IF ( (32 & @@OPTIONS) = 32 ) SET @ANSI_NULLS = 'ON';
SELECT @ANSI_NULLS AS ANSI_NULLS;
Izin
Memerlukan keanggotaan dalam peran publik .
Contoh
Contoh berikut menggunakan operator perbandingan Sama Dengan (=) dan Tidak Sama Dengan (<>) untuk membuat perbandingan dengan NULL nilai dan non-null dalam tabel. Contohnya juga menunjukkan bahwa IS NULL tidak terpengaruh oleh SET ANSI_NULLS pengaturan.
-- Create table t1 and insert values.
CREATE TABLE dbo.t1 (a INT NULL);
INSERT INTO dbo.t1 values (NULL),(0),(1);
GO
-- Print message and perform SELECT statements.
PRINT 'Testing default setting';
DECLARE @varname int;
SET @varname = NULL;
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
Sekarang atur ANSI_NULLS ke AKTIF dan uji.
PRINT 'Testing ANSI_NULLS ON';
SET ANSI_NULLS ON;
GO
DECLARE @varname int;
SET @varname = NULL
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
Sekarang atur ANSI_NULLS ke NONAKTIF dan uji.
PRINT 'Testing ANSI_NULLS OFF';
SET ANSI_NULLS OFF;
GO
DECLARE @varname int;
SET @varname = NULL;
SELECT a
FROM t1
WHERE a = @varname;
SELECT a
FROM t1
WHERE a <> @varname;
SELECT a
FROM t1
WHERE a IS NULL;
GO
-- Drop table t1.
DROP TABLE dbo.t1;
Lihat juga
Pernyataan SET (Transact-SQL)
SESSIONPROPERTY (SQL Transact)
= (Sama dengan) (Transact-SQL)
JIKA... ELSE (SQL Bertransaksi)
<>(Tidak Sama Dengan) (Transact-SQL)
Pernyataan SET (Transact-SQL)
SET ANSI_DEFAULTS (SQL Bertransaksi)
WHERE (SQL Bertransaksi)
SEMENTARA (SQL Bertransaksi)
