Индексированное представление и T-SQL, которые дают те же результаты, что и в SQL Server 2008 R2
-
11-10-2019 - |
Вопрос
Я хочу создать индексированный вид Мой взгляд с таким T-SQL
Select
o.Theme_ID as Theme_ID,
DATEADD(day, DATEDIFF(day, 0, o.Object_CreationDate), 0) as Objext_CreationDate,
Count_BIG(*) as ObjectCount, o.Object_Tonality from [dbo].Object o
inner join [dbo].Theme t on o.Theme_ID = t.Theme_ID
inner join [dbo].[ThemeWorkplace] tw on t.Theme_ID = tw.Theme_ID
inner join [dbo].Workplace w on w.Workplace_ID = tw.Workplace_ID
... where t.Theme_DeletedMark = 0
AND (w.Workplace_AccessType = 1 OR w.Workplace_AccessType = 8)
AND Object_DeletedMark = 0 ...
Group BY o.Theme_ID,o.Object_Tonality, DATEADD(day, DATEDIFF(day, 0, o.Object_CreationDate), 0)
Этот T-SQL работает нормально и позволяет установить кластерный индекс на Мой взгляд.
Проблема в этой таблице ThemeWorkplace
содержит несколько записей с одинаковыми Theme_ID
Анкет И даже я использую GROUP BY
- Я захожу Object_Count
ценность этого
равно: (реально Object_Count
значение) * Считается (Theme_ID
в ThemeWorkplace
).
Я не могу использовать DISTINCT
Слово в T-SQL, потому что в этом случае невозможно создать индекс в виде.
Какое предложение может получить правильные результаты, на мой взгляд?
Решение
Как вы отмечали, существуют значительные ограничения на создание индексированного представления. Методы, которые могут помочь вам здесь, такие как различные или подзадность, запрещены. Я думаю, что вам нужно пожертвовать материализацией взгляда в данном конкретном случае.