Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 не могу понять связь в системных представлениях между схемой секционирования и таблицей  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Здравствуйте. Возникла задача описать все индексы в базах данных предприятия. Наваял следующий запрос


with idx as
(
select
quotename(schema_name(t.schema_id))+'.'+quotename(t.name) as table_name,
quotename(i.name) as idx_name,
i.type,
i.type_desc,
i.is_unique,
i.is_primary_key,
i.is_unique_constraint,
i.data_space_id,
i.filter_definition,
quotename(f.name) fg,
ps.name,
idx_column = replace(
(
select
quotename(c.name)+
case when is_descending_key=1
then 'desc' else ''
end+',' as 'data()'
from sys.index_columns ic
join sys.columns c
on ic.column_id = c.column_id
and ic.object_id = c.object_id
where ic.object_id = i.object_id
and ic.index_id = i.index_id
and ic.is_included_column = 0
order by ic.key_ordinal
for xml path ('')
)+'!!!',',!!!',''),
include_column = replace(
(
select
quotename(c.name)+
case when is_descending_key=1
then 'desc' else ''
end+',' as 'data()'
from sys.index_columns ic
join sys.columns c
on ic.column_id = c.column_id
and ic.object_id = c.object_id
where ic.object_id = i.object_id
and ic.index_id = i.index_id
and ic.is_included_column = 1
order by ic.key_ordinal
for xml path ('')
)+'!!!',',!!!','')
,c2.name pcname
,spc.*
from sys.tables t
left join sys.indexes i
on i.object_id = t.object_id
and i.type != 0 --heap
left join sys.filegroups f
on f.data_space_id = i.data_space_id
left join sys.partition_schemes ps
on i.data_space_id = ps.data_space_id
left join sys.system_internals_partitions sip
on sip.object_id = i.object_id
and sip.index_id = i.index_id
left join sys.system_internals_partition_columns spc
on spc.partition_id = sip.partition_id
--and spc.key_ordinal = 1
left join sys.columns c2
on c2.object_id = i.object_id
and c2.column_id = spc.partition_column_id
where t.name like 'test2%'
)
select
--case when is_primary_key=1
-- then N'alter table '+table_name+N' add constraint '+idx_name+N' primary key '
-- +case when type=1 then N'clustered ' else N'nonclustered ' end+N' ('+idx_column+N') on '+fg
-- else N'create '+case when is_unique=1 then N'unique ' else N' ' end
-- +case when type=1 then N'clustered ' else N'nonclustered ' end
-- +N' index '+idx_name+N' on '+table_name+N' ('+idx_column+N') '
-- +isnull(N'include('+include_column+N') ',N'')
-- +isnull(N'where '+filter_definition+N' ',N'')+N'on '+fg
--end command,
*
from idx
order by
table_name,
type,
is_primary_key desc,
is_unique_constraint desc

все хорошо, но когда дело доходит до секционированных индексов это решение не учитывает эту возможность. Соответственно имею желание все таки реализовать корректно этот запрос с учетом и секционированных индексов.
Вопрос:
1. Через какие системные объекты можно связать список таблиц, со схемой секционирования - с этим разобрался sys.partition_schemes.
2. далее что не ясно. теперь неясно каким образом вытащить имя или ид колонки по которой произведено это секционирование в индексе???????
25 сен 12, 13:32    [13218539]     Ответить | Цитировать Сообщить модератору
 Re: не могу понять связь в системных представлениях между схемой секционирования и таблицей  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
предисловие... нужно из базы аудировать все индексы.
все это делаю и определяю в какой файловой группе индекс, но не получается вытянуть инфу из вьюх системных когда индекс секционирован. например

create index ix1 on tabl (i,j,k) on my_schm( j )

т.е. имя индекса, имя таблицы, поля имя схемы секционирования нашел как вытаскивать. а вот последнее поле 'J' которая аргумент у схемы секционирования не понял как выцеплять.
25 сен 12, 14:15    [13218958]     Ответить | Цитировать Сообщить модератору
 Re: не могу понять связь в системных представлениях между схемой секционирования и таблицей  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Сори за скороспелый вопрос... тупил долго не мог найти - разобрался.
все во вьюхе sys.index_columns
25 сен 12, 15:48    [13219702]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить