Question

Je veux créer vue indexée avec un tel t-sql:

    Select
   Table1_ID,
   cast(CONVERT(varchar(8),
   t2.Object_CreationDate, 112)AS DateTime) as Object_CreationDate ,
   Count_BIG(*) as ObjectTotalCount 
   from
       [dbo].Table2 t2 inner join [dbo].Table1 t1 on ...   
   Group BY
       Table1_ID, CONVERT(varchar(8), t2.Object_CreationDate, 112))

Je dois faire par groupe que par datepart de la colonne Object_CreationDate (type datetime2 ).

Aussi je veux à l'index de jeu sur les colonnes Theme_Id ET Object_CreationDate dans la vue dérivée.
Si j'utilise cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime) dans SELECT - Je vais rencontrer des problèmes avec index sur cette colonne. Parce que cette colonne (Object_CreationDate) n'est pas déterministe.

Je me demande s'il est possible de résoudre un problème.

Était-ce utile?

La solution

remplacer ...

CONVERT(varchar(8), t2.Object_CreationDate, 112))

... avec

DATEADD(day, DATEDIFF(day, 0, t2.Object_CreationDate), 0)
--OR
CAST(t2.Object_CreationDate AS date)

Le 2ème format est SQL Server 2008+ uniquement, le 1er est plus générale

Cela supprime la composante temporelle d'une valeur datetime à la date / datetime domaine sans datatype formats datetime dépendant de paramètres régionaux intermédiaire

Voir ces réponses: un et < a href = "https://stackoverflow.com/questions/1138142/best-way-to-convert-and-validate-a-date-string"> Deux (commentaires)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top