Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

ANSI_NULLS et QUOTED_IDENTIFIER ont tué des choses. À quoi servent-ils?

OK, du point de vue d'un développeur d'application, voici ce que font ces paramètres :

QUOTED_IDENTIFIER

Ce paramètre contrôle la façon dont les guillemets ".." sont interprétés par le compilateur SQL. Lorsque QUOTED_IDENTIFIER est activé alors les guillemets sont traités comme des crochets ([...] ) et peut être utilisé pour citer des noms d'objet SQL tels que des noms de table, des noms de colonne, etc. Lorsqu'il est désactivé (non recommandé), les guillemets sont traités comme des apostrophes ('..' ) et peut être utilisé pour citer des chaînes de texte dans les commandes SQL.

ANSI_NULLS

Ce paramètre contrôle ce qui se passe lorsque vous essayez d'utiliser un opérateur de comparaison autre que IS sur NUL. Lorsqu'il est activé, ces comparaisons suivent la norme qui dit que la comparaison avec NULL échoue toujours (car ce n'est pas une valeur, c'est un indicateur) et renvoie FALSE . Lorsque ce paramètre est désactivé (vraiment pas recommandé), vous pouvez le traiter avec succès comme une valeur et utiliser = , <> , etc. dessus et récupérez TRUE le cas échéant.

La bonne façon de gérer cela est d'utiliser à la place le IS (ColumnValue IS NULL .. ).

CONCAT_NULL_YIELDS_NULL

Ce paramètre contrôle si les valeurs NULL "Propogate" sont utilisées dans les expressions de chaîne. Lorsque ce paramètre est activé, il suit la norme et une expression telle que 'some string' + NULL .. renvoie toujours NULL. Ainsi, dans une série de concaténations de chaînes, un NULL peut faire en sorte que l'expression entière renvoie NULL. Désactiver cette option (également non recommandé) entraînera le traitement des valeurs NULL comme des chaînes vides, donc 'some string' + NULL s'évalue simplement à 'some string' .

La bonne façon de gérer cela est avec la fonction COALESCE (ou ISNULL) :'some string' + COALESCE(NULL, '') .. .