SET ANSI_NULL_DFLT_ON (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison d’analytique SQL dans Microsoft FabricEntrepôt dans Microsoft FabricBase de données SQL dans Microsoft Fabric

Modifie le comportement de la session de manière à supplanter l’acceptation par défaut des valeurs NULL dans les nouvelles colonnes lorsque l’option ANSI null default de la base de données a la valeur false. Pour plus d’informations sur la définition de la valeur par défaut du nul ANSI, voir ALTER DATABASE (Transact-SQL).

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Notes

Ce paramètre n’affecte la nullité des nouvelles colonnes que lorsque la nullabilité de la colonne n’est pas spécifiée dans les CREATE TABLE instructions et ALTER TABLE . Lorsque SETSET ANSI_NULL_DFLT_ON est activé, de nouvelles colonnes créées en utilisant les ALTER TABLE instructions et CREATE TABLE permettent des valeurs nulles si le statut de nullabilité de la colonne n’est pas explicitement spécifié. SET ANSI_NULL_DFLT_ON n’affecte pas les colonnes créées avec un NULL explicite ou NOT NULL.

Les deux SETSET ANSI_NULL_DFLT_OFF et SETSET ANSI_NULL_DFLT_ON ne peuvent pas être activés en même temps. Si l'une des options a la valeur ON, l'autre a automatiquement la valeur OFF. Par conséquent, soit ANSI_NULL_DFLT_OFF ou ANSI_NULL_DFLT_ON ou peuvent être activés, ou les deux peuvent être désactivés. Si l’une ou l’autre option est activée, ce réglage (SETSET ANSI_NULL_DFLT_OFF ou SETSET ANSI_NULL_DFLT_ON) prend effet. Si la valeur des deux options est OFF, SQL Server utilise la valeur de la colonne is_ansi_null_default_on de la vue de catalogue sys.databases.

Pour un fonctionnement plus fiable des scripts de Transact-SQL utilisés dans des bases de données avec différents paramètres de nullabilité, il est préférable de spécifier NULL ou NOT NULL dans CREATE TABLE les instructions and ALTER TABLE .

Le pilote ODBC SQL Server Native Client et le fournisseur OLE DB SQL Server Native Client pour SQL Server sont automatiquement définis ANSI_NULL_DFLT_ON sur ON lors de la connexion. Le défaut est SET ANSI_NULL_DFLT_ON DÉSACTIVÉ pour les connexions depuis DB-Library applications.

Quand SETSET ANSI_DEFAULTS on est ACTIVÉ, SETSET ANSI_NULL_DFLT_ON est activé.

Le paramètre est défini au moment de SET ANSI_NULL_DFLT_ON l’exécution ou de l’exécution et non au moment de l’analyse.

Le paramètre de SET ANSI_NULL_DFLT_ON ne s’applique pas lorsque les tables sont créées à l’aide de l’instruction SELECT INTO.

Pour afficher la valeur actuelle de ce paramètre, exécutez la requête suivante.

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;  
  

Autorisations

Nécessite l'appartenance au rôle public .

Exemples

L’exemple suivant illustre les effets de SET ANSI_NULL_DFLT_ON quand la valeur de l’option de base de données ANSI null default est ON et OFF, respectivement.

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;  

Voir aussi

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
SET Instructions (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)
SET ANSI_NULL_DFLT_OFF (Transact-SQL)