SET ANSI_NULL_DFLT_ON (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Memodifikasi perilaku sesi untuk mengesampingkan nullabilitas default kolom baru ketika opsi default null ANSI untuk database adalah false. Untuk informasi selengkapnya tentang mengatur nilai untuk default NULL ANSI, lihat MENGUBAH DATABASE (Transact-SQL).
Sintaks
-- Syntax for SQL Server and Azure SQL Database and Microsoft Fabric
SET ANSI_NULL_DFLT_ON {ON | OFF}
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
SET ANSI_NULL_DFLT_ON ON
Keterangan
Pengaturan ini hanya memengaruhi nullability kolom baru ketika nullability kolom tidak ditentukan dalam pernyataan CREATE TABLE dan ALTER TABLE. Saat SET ANSI_NULL_DFLT_ON AKTIF, kolom baru yang dibuat dengan menggunakan pernyataan ALTER TABLE dan CREATE TABLE memungkinkan nilai null jika status nullability kolom tidak ditentukan secara eksplisit. SET ANSI_NULL_DFLT_ON tidak memengaruhi kolom yang dibuat dengan NULL eksplisit atau NOT NULL.
SET ANSI_NULL_DFLT_OFF dan SET ANSI_NULL_DFLT_ON tidak dapat diatur AKTIF secara bersamaan. Jika satu opsi diatur AKTIF, opsi lainnya diatur NONAKTIF. Oleh karena itu, baik ANSI_NULL_DFLT_OFF atau ANSI_NULL_DFLT_ON dapat diatur ON, atau keduanya dapat diatur OFF. Jika salah satu opsi aktif, pengaturan tersebut (SET ANSI_NULL_DFLT_OFF atau SET ANSI_NULL_DFLT_ON) berlaku. Jika kedua opsi diatur NONAKTIF, SQL Server menggunakan nilai kolom is_ansi_null_default_on dalam tampilan katalog sys.databases .
Untuk operasi skrip Transact-SQL yang lebih andal yang digunakan dalam database dengan pengaturan nullability yang berbeda, lebih baik menentukan NULL atau NOT NULL dalam pernyataan CREATE TABLE dan ALTER TABLE.
Driver ODBC Klien Asli SQL Server dan Penyedia OLE DB Klien Asli SQL Server untuk SQL Server secara otomatis mengatur ANSI_NULL_DFLT_ON ke AKTIF saat menyambungkan. Default untuk SET ANSI_NULL_DFLT_ON NONAKTIF untuk koneksi dari aplikasi DB-Library.
Saat SET ANSI_DEFAULTS AKTIF, SET ANSI_NULL_DFLT_ON diaktifkan.
Pengaturan SET ANSI_NULL_DFLT_ON diatur pada waktu eksekusi atau run time dan bukan pada waktu penguraian.
Pengaturan SET ANSI_NULL_DFLT_ON tidak berlaku saat tabel dibuat menggunakan pernyataan SELECT INTO.
Untuk menampilkan pengaturan saat ini untuk pengaturan ini, jalankan kueri berikut.
DECLARE @ANSI_NULL_DFLT_ON VARCHAR(3) = 'OFF';
IF ( (1024 & @@OPTIONS) = 1024 ) SET @ANSI_NULL_DFLT_ON = 'ON';
SELECT @ANSI_NULL_DFLT_ON AS ANSI_NULL_DFLT_ON;
Izin
Memerlukan keanggotaan dalam peran publik .
Contoh
Contoh berikut menunjukkan efek dengan SET ANSI_NULL_DFLT_ON
kedua pengaturan untuk opsi database default null ANSI.
USE AdventureWorks2022;
GO
-- The code from this point on demonstrates that SET ANSI_NULL_DFLT_ON
-- has an effect when the 'ANSI null default' for the database is false.
-- Set the 'ANSI null default' database option to false by executing
-- ALTER DATABASE.
ALTER DATABASE AdventureWorks2022 SET ANSI_NULL_DEFAULT OFF;
GO
-- Create table t1.
CREATE TABLE t1 (a TINYINT) ;
GO
-- NULL INSERT should fail.
INSERT INTO t1 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to ON and create table t2.
SET ANSI_NULL_DFLT_ON ON;
GO
CREATE TABLE t2 (a TINYINT);
GO
-- NULL insert should succeed.
INSERT INTO t2 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to OFF and create table t3.
SET ANSI_NULL_DFLT_ON OFF;
GO
CREATE TABLE t3 (a TINYINT);
GO
-- NULL insert should fail.
INSERT INTO t3 (a) VALUES (NULL);
GO
-- The code from this point on demonstrates that SET ANSI_NULL_DFLT_ON
-- has no effect when the 'ANSI null default' for the database is true.
-- Set the 'ANSI null default' database option to true.
ALTER DATABASE AdventureWorks2022 SET ANSI_NULL_DEFAULT ON
GO
-- Create table t4.
CREATE TABLE t4 (a TINYINT);
GO
-- NULL INSERT should succeed.
INSERT INTO t4 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to ON and create table t5.
SET ANSI_NULL_DFLT_ON ON;
GO
CREATE TABLE t5 (a TINYINT);
GO
-- NULL INSERT should succeed.
INSERT INTO t5 (a) VALUES (NULL);
GO
-- SET ANSI_NULL_DFLT_ON to OFF and create table t6.
SET ANSI_NULL_DFLT_ON OFF;
GO
CREATE TABLE t6 (a TINYINT);
GO
-- NULL INSERT should succeed.
INSERT INTO t6 (a) VALUES (NULL);
GO
-- Set the 'ANSI null default' database option to false.
ALTER DATABASE AdventureWorks2022 SET ANSI_NULL_DEFAULT ON;
GO
-- Drop tables t1 through t6.
DROP TABLE t1,t2,t3,t4,t5,t6;
Lihat Juga
ALTER TABLE (Transact-SQL)
BUAT TABEL (Transact-SQL)
Pernyataan SET (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)
SET ANSI_NULL_DFLT_OFF (Transact-SQL)