Как получить список всех секционированных таблиц в моей базе данных?
На какие системные таблицы / DMV я должен смотреть?
Как получить список всех секционированных таблиц в моей базе данных?
На какие системные таблицы / DMV я должен смотреть?
Ответы:
Этот запрос должен дать вам то, что вы хотите:
select distinct t.name
from sys.partitions p
inner join sys.tables t
on p.object_id = t.object_id
where p.partition_number <> 1
Представление sys.partitions
каталога дает список всех разделов для таблиц и большинства индексов. Просто присоединяйся, sys.tables
чтобы получить таблицы.
Все таблицы имеют хотя бы один раздел, поэтому, если вы ищете специально для многораздельных таблиц, вам придется отфильтровать этот запрос на основе sys.partitions.partition_number <> 1
(для однораздельных таблиц partition_number
всегда равен 1).
partition_id
в вашем предложении ГДЕ вам нужно partition_number
. Мои извенения.
Метинкс лучший запрос выглядит следующим образом:
select object_schema_name(i.object_id) as [schema],
object_name(i.object_id) as [object],
i.name as [index],
s.name as [partition_scheme]
from sys.indexes i
join sys.partition_schemes s on i.data_space_id = s.data_space_id
При этом рассматривается «правильное» место для идентификации схемы разбиения: у sys.partition_schemes
него правильная мощность (нет необходимости distinct
), показывается только разделенный объект (нет необходимости в where
предложении фильтрации ), проецируется имя схемы и имя схемы разбиения. Обратите также внимание на то, как этот запрос подчеркивает недостаток исходного вопроса: разбиваются не таблицы , а индексы (включая индексы 0 и 1, иначе говоря, куча и кластеризованный индекс). Таблица может иметь несколько индексов, некоторые разделены, некоторые нет.
Хорошо, тогда как насчет объединения 2:
select
object_schema_name(i.object_id) as [schema],
object_name(i.object_id) as [object_name],
t.name as [table_name],
i.name as [index_name],
s.name as [partition_scheme]
from sys.indexes i
join sys.partition_schemes s on i.data_space_id = s.data_space_id
join sys.tables t on i.object_id = t.object_id