Vous pouvez utiliser ces deux méthodes, mais il existe des différences:
SELECT ISNULL(col1, 0 ) FROM table1
SELECT COALESCE(col1, 0 ) FROM table1
Comparaison de COALESCE () et ISNULL ():
La fonction ISNULL et l'expression COALESCE ont un objectif similaire mais peuvent se comporter différemment.
Étant donné que ISNULL est une fonction, elle n'est évaluée qu'une seule fois. Comme décrit ci-dessus, les valeurs d'entrée de l'expression COALESCE peuvent être évaluées plusieurs fois.
La détermination du type de données de l'expression résultante est différente. ISNULL utilise le type de données du premier paramètre, COALESCE suit les règles d'expression CASE et renvoie le type de données de valeur avec la priorité la plus élevée.
La capacité NULL de l'expression de résultat est différente pour ISNULL et COALESCE. La valeur de retour ISNULL est toujours considérée comme NOT NULL (en supposant que la valeur de retour est non NULL) tandis que COALESCE avec des paramètres non NULL est considéré comme NULL. Ainsi, les expressions ISNULL (NULL, 1) et COALESCE (NULL, 1) bien qu'équivalentes ont des valeurs de nullabilité différentes. Cela fait une différence si vous utilisez ces expressions dans des colonnes calculées, créez des contraintes de clé ou rendez la valeur de retour d'une UDF scalaire déterministe afin qu'elle puisse être indexée comme indiqué dans l'exemple suivant.
- Cette instruction échoue car la clé PRIMAIRE ne peut pas accepter les valeurs NULL - et la possibilité de valeur NULL de l'expression COALESCE pour col2 - est évaluée à NULL.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0) PRIMARY KEY,
col3 AS ISNULL(col1, 0)
);
- Cette instruction réussit car la possibilité de valeur NULL de la fonction - ISNULL est évaluée comme NOT NULL.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0),
col3 AS ISNULL(col1, 0) PRIMARY KEY
);
Les validations pour ISNULL et COALESCE sont également différentes. Par exemple, une valeur NULL pour ISNULL est convertie en int alors que pour COALESCE, vous devez fournir un type de données.
ISNULL ne prend que 2 paramètres alors que COALESCE prend un nombre variable de paramètres.
si vous avez besoin d'en savoir plus, voici le document complet de msdn.
Mojtaba Rezaeian
la source