Ответ 1
SELECT o.name as view_name, i.name as index_name
FROM sysobjects o
INNER JOIN sysindexes i
ON o.id = i.id
WHERE o.xtype = 'V' -- View
Как вы можете получить список представлений в базе данных SQL-сервера, имеющих индексы (например, индексированные представления)?
Мне было довольно легко запускать "ALTER VIEW" по мере того, как я разрабатываю и забываю, что я не только редактирую представление, но и отбрасываю существующий индекс. Поэтому я подумал, что было бы неплохо иметь небольшой запрос утилиты, который бы перечислил меня со всех представлений с помощью индексов.
SELECT o.name as view_name, i.name as index_name
FROM sysobjects o
INNER JOIN sysindexes i
ON o.id = i.id
WHERE o.xtype = 'V' -- View
Мне нравится использовать более новые системные таблицы:
select
OBJECT_SCHEMA_NAME(object_id) as [SchemaName],
OBJECT_NAME(object_id) as [ViewName],
Name as IndexName
from sys.indexes
where object_id in
(
select object_id
from sys.views
)
Внутренняя версия соединения
select
OBJECT_SCHEMA_NAME(si.object_id) as [SchemaName],
OBJECT_NAME(si.object_id) as [ViewName],
si.Name as IndexName
from sys.indexes AS si
inner join sys.views AS sv
ON si.object_id = sv.object_id