Published on

January 11, 2019

Travailler avec NULL dans SQL Server

Dans SQL Server, NULL est utilisé pour indiquer l’absence d’une valeur. C’est un marqueur indépendant du type de données qui représente des informations manquantes ou inapplicables. Comprendre comment travailler avec NULL est essentiel pour une gestion efficace de la base de données. Dans cet article, nous explorerons le concept de NULL dans SQL Server et apprendrons comment le gérer.

Déclaration et affectation de NULL

Pour travailler avec NULL dans SQL Server, le mot réservé NULL est utilisé pour y faire référence. Il est indépendant du type de données, vous pouvez donc l’assigner à n’importe quelle variable ou champ en utilisant l’opérateur égal (=). Voici un exemple :

DECLARE @NVi AS INT = NULL;
DECLARE @NVc AS NVARCHAR(30) = NULL;
DECLARE @NVv AS SQL_VARIANT = NULL;

SELECT @NVi, @NVc, @NVv;

Lorsque vous exécutez cette instruction, vous obtiendrez le même résultat pour chaque type de données, comme prévu.

Insertion et mise à jour de champs avec NULL

Lors de l’insertion ou de la mise à jour de champs avec des valeurs NULL, vous pouvez le faire comme indiqué dans les exemples suivants :

-- Pour l'insertion de valeurs
INSERT INTO test1..Table_1 (column_char, column2) VALUES (NULL, NULL);

-- Pour la mise à jour de valeurs
UPDATE test1..Table_1 SET column2 = NULL;

Il est important de noter que l’opérateur égal (=) est utilisé uniquement pour l’affectation lorsqu’on travaille avec NULL.

Opérations et comparaisons avec NULL

Lors de l’exécution d’opérations ou de comparaisons impliquant NULL, le résultat peut être VRAI, FAUX ou INCONNU. Cela est connu sous le nom de logique à trois valeurs. Par exemple, les opérations suivantes donnent NULL :

-- Opérations arithmétiques
SELECT NULL + 5, NULL - 3.47, NULL * 3.1416, NULL / 0;
SELECT SQRT(NULL), POWER(NULL, 2);

-- Opérations sur les chaînes de caractères
SELECT 'HELLO ' + NULL + 'WORLD';
SELECT QUOTENAME(NULL);
SELECT LTRIM(NULL);

-- Opérations sur les dates
SELECT DATEADD(m, 1, NULL);
SELECT DATEDIFF(m, GETDATE(), NULL);

Lors de la comparaison de NULL avec n’importe quelle valeur, y compris NULL lui-même, le résultat est également NULL. Par exemple :

-- Comparaison avec 0
IF (0 = NULL) OR (0 <> NULL)
    SELECT 'YES'
ELSE
    SELECT 'NO'

-- Comparaison avec une chaîne de caractères vide ''
IF ('' = NULL) OR ('' <> NULL)
    SELECT 'YES'
ELSE
    SELECT 'NO'

-- Même comparaison avec un autre NULL
IF (NULL = NULL) OR (NULL <> NULL)
    SELECT 'YES'
ELSE
    SELECT 'NO'

Pour comparer une valeur ou une colonne et vérifier si elle est NULL ou non, SQL Server fournit les opérateurs IS NULL et IS NOT NULL. Voici comment les utiliser :

-- Utilisation de IS NULL
SELECT * FROM test1..Table_1 WHERE column2 IS NULL;

-- Utilisation de IS NOT NULL
SELECT * FROM test1..Table_1 WHERE column_char IS NOT NULL;

-- Utilisation dans une structure IF
DECLARE @NVi AS INT = NULL;
IF (@NVi IS NULL)
    SELECT 'YES'
ELSE
    SELECT 'NO';

De plus, vous pouvez utiliser la fonction ISNULL pour remplacer les valeurs NULL par une valeur par défaut. Par exemple :

SELECT ISNULL(@NVi, 0);

Considérations spéciales pour de bonnes performances

Lorsque vous travaillez avec NULL dans SQL Server, il y a quelques considérations à garder à l’esprit pour des performances optimales :

  • Préférez utiliser IS NULL plutôt que ISNULL() : Lorsque cela est possible, comparez les prédicats en utilisant IS NULL avant d’utiliser ISNULL() pour convertir NULL en valeurs par défaut. Cela est dû au fait que les valeurs converties ne sont pas SARGABLE, ce qui peut avoir un impact sur les performances. Par exemple :
-- La première requête utilise une recherche d'index :)
SELECT FirstName, MiddleName, LastName
FROM Person.Person
WHERE MiddleName = N'' OR MiddleName IS NULL;

-- La deuxième requête utilise un balayage d'index :(
SELECT FirstName, MiddleName, LastName
FROM Person.Person
WHERE ISNULL(MiddleName, N'') = N'';

Soyez prudent avec les agrégations sur des données inexistantes : Lors de l’exécution d’agrégations, soyez prudent avec les données inexistantes. Même lorsque les colonnes n’acceptent pas NULL, l’agrégation de données qui n’existent pas dans la table renvoie NULL, et non 0. Pour gérer cela, vous pouvez utiliser la fonction ISNULL() après l’agrégation. Par exemple :

-- Même lorsque le champ TotalDue n'accepte pas NULL,
-- la SOMME des valeurs inexistantes est NULL, et non 0
SELECT SUM(TotalDue) AS [Total Due]
FROM Sales.SalesOrderHeader
WHERE DueDate > GETDATE();

En suivant ces conseils et considérations, vous pouvez travailler efficacement avec NULL dans vos bases de données SQL Server et garantir de bonnes performances.

N’oubliez pas de toujours tester votre code avant de le déployer dans un environnement de production et envisagez d’utiliser des valeurs par défaut et des colonnes non nulles chaque fois que possible pour simplifier la gestion de votre base de données.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.