Problema con la creazione di vista indicizzata e GROUP BY in SQL Server 2008 R2
-
08-10-2019 - |
Domanda
Voglio creare vista indicizzata con tale 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))
Ho bisogno di fare di gruppo da solo datepart di colonna Object_CreationDate
(tipo datetime2 ).
Anche io voglio indice impostato su colonne Theme_Id
E Object_CreationDate
nella vista derivata.
Se uso cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime)
in SELEZIONATE - Prendo problemi con indice su questa colonna. Perché questa colonna (Object_CreationDate
) non è deterministico.
Mi chiedo se è possibile risolvere un problema.
Soluzione
sostituire ...
CONVERT(varchar(8), t2.Object_CreationDate, 112))
... con
DATEADD(day, DATEDIFF(day, 0, t2.Object_CreationDate), 0)
--OR
CAST(t2.Object_CreationDate AS date)
Il secondo formato è SQL Server 2008+ solo, il primo è più generale
Ciò elimina la componente di tempo da un valore datetime in data / datetime dominio tipo di dati senza alcuna formati datetime dipendenti di locale intermedio
Vedere queste risposte: Un e < a href = "https://stackoverflow.com/questions/1138142/best-way-to-convert-and-validate-a-date-string"> Due (commenti)