Question

J'ai un champ datetime dans une table appelée dbo.Traffic

J'essaie de regrouper les données de trafic par jour.J'ai l'intention de créer une vue liée au schéma et d'ajouter un index.

CREATE VIEW [dbo].[vwTraffic] WITH SCHEMABINDING AS

SELECT  CONVERT(date, CreateDate) as CreateDate, Circuit, Fuseaction,     
   COUNT(CreateDate) AS activity
FROM    dbo.Traffic WITH (NOLOCK)
GROUP BY CONVERT(date, CreateDate), Circuit, Fuseaction

Dans la table de base, CreateDate n'est pas nullable.Cependant, dès que je crée une vue et que je la convertis en date, elle devient nullable.

enter image description here

Était-ce utile?

La solution

Cela est dû au comportement des colonnes calculées en termes de nullabilité.Enregistrez-le ici sur MSDN:

Le moteur de base de données détermine automatiquement la nullité des colonnes calculées en fonction des expressions utilisées.Le résultat de la plupart des expressions est considéré comme nullable même si seules des colonnes non nullables sont présentes, car d'éventuels dépassements inférieurs ou excessifs produiront également des résultats nuls.Utilisez la fonction COLUMNPROPERTY avec la propriété AllowsNull pour étudier la possibilité de nullité de toute colonne calculée dans une table. Une expression nullable peut être transformée en une expression non nullable en spécifiant ISNULL(check_expression, constant), où la constante est une valeur non nulle remplacée par tout résultat nul..

Vous pouvez l'utiliser comme votre CreateDate.Vous n'avez pas à vous soucier de la valeur constante comme vous n'auriez jamais dû l'avoir NULL:

ISNULL(CONVERT(date, CreateDate),0) as CreateDate
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top