Проблема с созданием проиндексированного просмотра и группы по SQL Server 2008 R2
-
08-10-2019 - |
Вопрос
Я хочу создать проиндексированный вид с таким 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))
Мне нужно сделать группа по Только по на сегодняшний день колонна Object_CreationDate
(тип datetime2. ).
Также я хочу установить индекс на столбцы Theme_Id
А ТАКЖЕ Object_CreationDate
в полученном виде.
Если я использую cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime)
В выборе - у меня проблемы с индексом в этом столбце. Потому что этот столбец (Object_CreationDate
) не детерминирован.
Интересно, можно ли решить проблему.
Решение
заменять ...
CONVERT(varchar(8), t2.Object_CreationDate, 112))
... с участием
DATEADD(day, DATEDIFF(day, 0, t2.Object_CreationDate), 0)
--OR
CAST(t2.Object_CreationDate AS date)
2-й формат - только SQL Server 2008+, 1-й более общего
Это удаляет компонент времени из значения DateTime в домене даты данных даты / даты данных без каких-либо промежуточных форматов DateTime Locale
Смотрите эти ответы: Один а также Два (комментарии)