Je lis simplement la documentation des examens SQL Server 2012 et j'ai vu le point suivant:
cas versus isnull versus coalesce
Maintenant, je sais COMMENT utiliser chacun mais je ne sais pas QUAND utiliser chacun. Pourriez-vous clarifier quelque chose? Merci.
Ps. Pourrions-nous avoir une étiquette pour les questions d'examen?
sql-server
sql-server-2012
Stuart Blackler
la source
la source
COALESCE
est étendu àCASE
mais, évidemment, dans uneCASE
déclaration que vous écrivez vous-même, vous pouvez être plus flexible dans lesWHEN
conditions. PourISNULL
vsCOALESCE
liés / en double?Réponses:
ISNULL - disponible uniquement dans SQL Server. Permet de tester et de remplacer une valeur NULL par une autre.
COALESCE - norme ANSI. Permet le test et le remplacement d'une valeur NULL par la première valeur non nulle dans un ensemble d'arguments de longueur variable. Il est important de noter que les facteurs de priorité des types de données dans ce
Dans l'exemple ci-dessus, «a» est la première valeur non nulle, mais les données de caractère ont une priorité inférieure à l'entier.
Une autre considération entre ISNULL et COALESCE est que la résultante de ISNULL est déterminée comme étant NON NULL tandis que le résultat d'un appel COALESCE est NULLable. Voir le post de JRJ ISNULL () <> COALESCE () Bien que cela puisse sembler anodin, l'optimiseur de requête peut faire différents plans en fonction de la nullité d'une colonne.
Vous pouvez facilement tester la nullité de vos expressions isnull / coalesce / case en l'exécutant via le dmo sys.dm_exec_describe_first_result_set
CASE - Également une fonction scalaire standard ANSI. J'envisagerais d'utiliser CASE au cours des deux précédents lorsque j'ai un test qui ne peut pas être exprimé dans un simple scalaire mais c'est une réponse assez faible, je l'admets.
la source
COALESCE
. Merci encoreCASE
est techniquement une expression, pas une fonction.ISNULL vous donne la possibilité de renvoyer 1 repalcement, COALESCE n'est pas limité à une seule valeur, par exemple
COALESCE(v1,v2,v3,v4,v5)
si V5 est la seule valeur qui n'est PAS NULL, elle sera retournéela source