SET CONCAT_NULL_YIELDS_NULL dans SQL Server

À quelle fréquence pensons-nous aux valeurs NULL lors de la concaténation des valeurs NULL avec des valeurs de chaîne? La concentration de chaînes avec des valeurs NULL peut nous donner des résultats inattendus si nous ne connaissons pas les options SET de la base de données CONCAT_NULL_YIELDS_NULL.

CONCAT_NULL_YIELDS_NULL Les options contrôlent si les résultats de concaténation doivent être traités comme des valeurs de chaîne NULL ou vides.

Une note importante de la documentation en ligne de SQL Server

Dans une future version de SQL Server, CONCAT_NULL_YIELDS_NULL sera toujours activé et toutes les applications qui définiront explicitement l'option sur OFF généreront 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 CONCAT_NULL_YIELDS_NULL {ON | OFF} 

La description

SET CONCAT_NULL_YIELDS_NULL ON

Lorsque l'option de base de données CONCAT_NULL_YIELDS_NULL est activée, la concaténation d'une valeur de chaîne avec NULL entraîne l'affichage de NULL. Lorsque CONCAT_NULL_YIELDS_NULL est défini sur ON, les valeurs NULL sont considérées comme indéterminées, ce qui permet de concaténer une valeur de chaîne avec des rendements inconnus dans la sortie INCONNUE et NULL.

Exemple:

SET CONCAT_NULL_YIELDS_NULL ON; SELECT 'recettes techniques' + NULL; --résultat NULL. 

SET CONCAT_NULL_YIELDS_NULL OFF

Lorsque l'option de base de données CONCAT_NULL_YIELDS_NULL est définie sur OFF, la concaténation d'une valeur de chaîne avec NULL renvoie une chaîne en tant que sortie. Lorsque CONCAT_NULL_YIELDS_NULL est défini sur OFF, les valeurs NULL sont considérées comme des chaînes vides. Par conséquent, concaténer une valeur de chaîne avec des chaînes vides renvoie dans une chaîne en sortie car elle est considérée comme TRUE au lieu de UNKNOWN.

Exemple:

SET CONCAT_NULL_YIELDS_NULL OFF; SELECT 'recettes techniques' + NULL; --résultats dans 'recettes-techniques'. 

Dans les futures versions de SQL Server, l'option de jeu CONCAT_NULL_YIELDS_NULL sera obsolète. Par conséquent, nous devrions éviter de l'utiliser dans les travaux de développement futurs. Nous pouvons utiliser le ISNULL ou COALESCE fonction pour gérer le comportement des valeurs NULL lors de la concaténation de chaînes. Il est également conseillé d'utiliser Fonction CONCAT concaténer des chaînes introduites avec SQL Server 2012 édition qui gère parfaitement la concaténation des valeurs NULL.

Utilisez la fonction CONCAT / ISNULL / COALESCE au lieu de CONCAT_NULL_YIELDS_NULL

Les exemples suivants doivent être suivis lors de l'écriture de code au lieu d'utiliser les options de base de données CONCAT_NULL_YIELDS_NULL lors de la concaténation de chaînes.

DÉCLAREZ @ MyVar1 en tant que VARCHAR (50) = 'Vous êtes', @ MyVar2 en tant que VARCHAR (50) = NULL, @ MyVar3 en tant que VARCHAR (50) = 'sur tech-recipes.com'; SÉLECTIONNER CONCAT (@ MyVar1, @ MyVar2, @ MyVar3); 

Dans l'exemple ci-dessus, nous utilisons la fonction CONCAT introduite avec SQL Server 2012. Elle traitera la valeur NULL dans la variable @ MyVar2 comme une chaîne vide lors de la concaténation de chaînes. Il est toujours préférable d'utiliser cette fonction au lieu de jouer avec l'option set CONCAT_NULL_YIELDS_NULL pour éviter toute modification de code, car ce paramètre sera obsolète.

DÉCLAREZ @ MyVar1 en tant que VARCHAR (50) = 'Vous êtes', @ MyVar2 en tant que VARCHAR (50) = NULL, @ MyVar3 en tant que VARCHAR (50) = 'sur tech-recipes.com'; SELECT ISNULL (@ MyVar1, ") + ISNULL (@ MyVar2,") + ISNULL (@ MyVar3, "); 

Dans l'exemple ci-dessus, nous utilisons la fonction ISNULL pour vérifier et remplacer toute occurrence de NULL par une chaîne vide au lieu d'utiliser le paramètre CONCAT_NULL_YIELDS_NULL. Nous pouvons également utiliser la fonction ANSI COALESCE au lieu de ISNULL.