SET ANSI_NULLS (ON | OFF) dans SQL Server

le ANSI_NULLS L'option de base de données SET contrôle le comportement des opérateurs Equal (=) et de comparaison (! =) dans les requêtes lors du traitement des enregistrements NULL. C'est une norme ISO de décider, pour une action de requête, de déterminer comment SQL Server doit gérer la comparaison avec les valeurs NULL.

La plupart d'entre nous doivent avoir vu le paramètre ANSI_NULLS (ON | OFF) utilisé au début d'une procédure stockée, d'une fonction ou d'autres objets de base de données.

Remarque importante de SQL Server Books en ligne:

Dans une version ultérieure de SQL Server, ANSI_NULLS sera toujours activé et toute application définissant explicitement l'option sur OFF générera une erreur. Évitez d'utiliser cette fonctionnalité dans les nouveaux travaux de développement et prévoyez de modifier les applications qui l'utilisent actuellement.

Syntaxe

SET ANSI_NULLS {ON | OFF} 

SET ANSI_NULLS ON

Lorsque l'option de base de données ANSI_NULL est définie sur SUR, puis une comparaison avec les rendements NULL des enregistrements INCONNU. Par conséquent, aucune ligne n'est renvoyée. Si vous comparez quoi que ce soit avec NULL, il en résultera comme INCONNU, ainsi que le NULL = NULL la comparaison sera considérée comme INCONNUE. Vous ne pouvez pas comparer NULL avec quoi que ce soit. Il s’agit d’une norme ISO pour les enregistrements NULL.

SET ANSI_NULLS OFF

Lorsque l'option de base de données ANSI_NULLS est définie sur DE, puis une comparaison avec des enregistrements NULL renvoie des lignes sous forme de comparaison évaluant VRAI au lieu de INCONNU. Cela annule le comportement ISO. Avec ANSI_NULLS OFF, la comparaison avec les enregistrements NULL donne TRUE; par conséquent, les enregistrements sont retournés. Lorsque l'option de base de données ANSI_NULLS OFF est utilisée, SQL Server considère les valeurs NULL comme des valeurs spéciales lors de la comparaison avec d'autres enregistrements.

ANSI_NULLS Exemples

Créons une table temporaire d'employés et remplissons-la avec des enregistrements de test.

SI OBJECT_ID ('tempdb… #Employee') N'EST PAS NUL DROP TABLE #Employee; CREATE TABLE #Employee (Id IDENTITY INT (1, 1) PRIMARY KEY, Nom VARCHAR (100) NON NULL, Salary INT NULL); INSERT INTO #Valeurs Employé ('Niraj', 125), ('Vish', 80), ('Chetan', 235), ('Imans', NULL); SELECT * FROM #Employee; 

Comme indiqué ci-dessus, nous sélectionnons tous les enregistrements dans les tables d'employés et mettons en surbrillance les enregistrements NULL et NOT NULL.

Différencier les enregistrements NULL et NOT NULL

--Méthode standard pour tester NULL SELECT * FROM #Employee WHERE Salary IS NULL; SELECT * FROM #Employee O le salaire n'est pas nul; 

L'exemple ci-dessus montre la méthode standard pour extraire les enregistrements NULL de la table. C'est l'approche la plus recommandée pour traiter les valeurs NULL.

SET ANSI_NULLS ON

- Configurez l'option ANSI_NULLS sur ON - Ne renvoie aucune ligne après le comportement ISO. SET ANSI_NULLS ON SELECT * FROM #Employee WHERE Salary = NULL; SELECT * FROM #Employee WHERE Salary NULL; 

Dans l'exemple ci-dessus, ANSI_NULLS est ON. Par conséquent, la comparaison avec les valeurs NULL est évaluée en tant que UNKNOWN et aucune ligne n'est renvoyée.

SET ANSI_NULLS OFF

--Placez l'option ANSI_NULLS sur OFF --Retourne les enregistrements ayant la valeur NULL. Annule le comportement ISO. SET ANSI_NULLS OFF SELECT * FROM #Employee WHERE Salary = NULL; SELECT * FROM #Employee WHERE Salary NULL; 

Dans l'exemple ci-dessus, ANSI_NULLS est désactivé. Par conséquent, une comparaison avec les valeurs NULL est évaluée comme VRAI. Cela donne aux valeurs NULL une signification spéciale et les enregistrements sont renvoyés par les requêtes ci-dessus.

En savoir plus sur la programmation de base de données et SQL de Tech-Recipes.