ISNULL et COALESCE bien qu'équivalents, peuvent se comporter différemment. Une expression impliquant ISNULL avec des paramètres non nuls est considérée comme NOT NULL, tandis que les expressions impliquant COALESCE avec des paramètres non nuls sont considérées comme NULL.
Réponses
Trop de publicités?Il détermine la nullabilité, disons, d'une colonne calculée en utilisant ISNULL ou COALESCE
RowCheckSum AS COALESCE(...)
...signifie que la définition de la colonne RowCheckSum
a le mot-clé NULL
, et
RowCheckSum2 AS ISNULL(...)
...a une définition NOT NULL
.
Cela signifie aussi que dans l'ensemble de résultats, le premier champ peut renvoyer des valeurs NULL
, et le deuxième - non.
C'est mal formulé; il essaie de dire que IsNull est toujours évalué comme une colonne Not Null par défaut; tandis que Coalesce peut être évalué comme une valeur par défaut de Null.
Create view dbo.pdtest
as
Select
ISNULL(GETDATE(), GETDATE()) as test1,
coalesce(GETDATE(), getdate()) as test2
go
Create view dbo.pdtest2
as
Select
ISNULL(GETDATE(), GETDATE()) as test1,
coalesce(GETDATE(), getdate(), null) as test2
Lorsque vous consultez les définitions des colonnes de la vue (dans le studio de gestion par exemple), la définition sur pdTest montre les colonnes comme
DateTime not null,
DateTime not null.
Sur pdtest2, la définition est
DateTime Not Null,
DateTime Null.
Si vous ajoutez ensuite une troisième vue; où l'instruction isnull est évaluée comme null
Create view dbo.pdtest3
as
Select
ISNULL(GETDATE(), null) as test1,
coalesce(GETDATE(), getdate(), null) as test2
La définition des données de la vue est toujours Not Null, Null.