Problème avec la création d'Indexed Voir et GROUP BY dans SQL Server 2008 R2
-
08-10-2019 - |
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.
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)