SET ANSI_NULL_DFLT_ON (Transact-SQL)
Изменяет поведение сеанса, чтобы переопределить допустимость значений NULL для новых столбцов, предполагаемую по умолчанию, если значение параметра ANSI null default для базы данных равно false. Дополнительные сведения о задании значения ANSI null default см. в разделах ALTER DATABASE (Transact-SQL) и Установка параметров базы данных.
Синтаксис
SET ANSI_NULL_DFLT_ON {ON | OFF}
Замечания
Данная настройка только определяет, разрешаются ли значения NULL в новых столбцах, когда возможность принимать значение NULL не указана в инструкциях CREATE TABLE и ALTER TABLE. Если значение SET ANSI_NULL_DFLT_ON равно ON, для новых, создаваемых с помощью инструкций ALTER TABLE и CREATE TABLE столбцов будут разрешены значения NULL, если для такого столбца явно не задана допустимость значений NULL. Параметр SET ANSI_NULL_DFLT_ON не влияет на столбцы, создаваемые с явным значением NULL или NOT NULL.
Оба параметра SET ANSI_NULL_DFLT_OFF и SET ANSI_NULL_DFLT_ON не могут быть установлены в ON одновременно. Если один параметр установлен в ON, другой устанавливается в OFF. Поэтому можно установить в ON либо ANSI_NULL_DFLT_OFF, либо ANSI_NULL_DFLT_ON, или же установить оба параметра в OFF. Если один из параметров установлен в ON, применяется эта установка (SET ANSI_NULL_DFLT_OFF или SET ANSI_NULL_DFLT_ON). Если оба параметра имеют значение OFF, SQL Server использует значение столбца is_ansi_null_default_on в представлении каталога sys.databases.
Для более надежного выполнения скриптов на языке Transact-SQL, используемых в базах данных с различными настройками допустимости значения NULL, лучше указывать свойство NULL или NOT NULL с помощью инструкций CREATE TABLE и ALTER TABLE.
При соединении с драйвером ODBC для собственного клиента SQL Server или поставщика OLE DB для собственного клиента SQL Server для SQL Server параметр ANSI_NULL_DFLT_ON автоматически устанавливается в ON. Значение SET ANSI_NULL_DFLT_ON для соединений из приложений DB-Library по умолчанию равно OFF.
Если значение SET ANSI_DEFAULTS равно ON, включается SET ANSI_NULL_DFLT_ON.
Параметр SET ANSI_NULL_DFLT_ON устанавливается во время выполнения или запуска, но не во время синтаксического анализа.
Настройка SET ANSI_NULL_DFLT_ON не используется при создании таблиц с помощью инструкции SELECT INTO.
Разрешения
Необходимо членство в роли public.
Примеры
Следующий пример демонстрирует действие команды SET ANSI_NULL_DFLT_ON с обеими настройками для параметра базы данных ANSI null default.
USE AdventureWorks2008R2;
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 AdventureWorks2008R2 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 AdventureWorks2008R2 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 AdventureWorks2008R2 SET ANSI_NULL_DEFAULT ON;
GO
-- Drop tables t1 through t6.
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
DROP TABLE t4;
DROP TABLE t5;
DROP TABLE t6;