Проблема с созданием индексированного представления и группы BY в SQL Server 2008 R2 - PullRequest
0 голосов
/ 10 декабря 2010

Я хочу создать индексированное представление с таким 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))

Мне нужно сделать группировкой по только по datepart столбца Object_CreationDate (тип datetime2 ).

Также я хочу установить индекс для столбцов Theme_Id И Object_CreationDate в производном представлении.
Если я использую cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime) в SELECT - у меня будут проблемы с индексом в этом столбце. Потому что этот столбец (Object_CreationDate) не является детерминированным.

Интересно, можно ли решить проблему.

1 Ответ

3 голосов
/ 10 декабря 2010

replace ...

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 в домене типа данных date / datetime без каких-либо промежуточных, зависящих от локали форматов даты и времени

См. Ответы: Один и Два (комментарии)

...