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

Откуда: Moscow
Сообщений: 43
Доброго всем дня.
У меня есть такой запросик:

-- Indexes
SELECT '[' +  sch.name + '].[' + tab.name + ']' as TabName, 
      STUFF((
      select ', [' + name + ']' as [text()]
      from sys.columns col
          WHERE col.object_id = tab.object_id       
      for xml path('')),1,1,'') as ColumnName, 
Indexess.name as IndexName, Indexess.type_desc, Indexess.is_primary_key, Indexess.is_unique_constraint, Indexess.fill_factor,Indexess.is_disabled, FG.name as FileGroup
FROM sys.tables tab
JOIN sys.schemas sch ON sch.schema_id = tab.schema_id
JOIN sys.indexes Indexess ON tab.object_id = Indexess.object_id
JOIN sys.index_columns idc ON idc.object_id = tab.object_id AND idc.index_id = Indexess.index_id 
JOIN sys.filegroups FG ON FG.data_space_id = indexess.data_space_id
WHERE tab.type_desc = 'USER_TABLE' AND tab.name NOT LIKE 'sysdiagrams' AND tab.is_ms_shipped = '0'
ORDER BY Sch.name, tab.name, Indexess.name 


Так вот вопрос: Как сделать так, чтоб узнать имена всех столбцов, которые принадлежат индексу?
Но есть одно "но" - надо, чтоб имена столбцов были перечислены через запятую.

Данный селект не совсем верный, так как возвращает имена столбцов, которые есть в таблице, а вот которые из них есть на индексе, это вопрос...

Сообщение было отредактировано: 3 июн 09, 11:33
3 июн 09, 11:14    [7259574]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Можете так попробовать:

select '[' +  sch.name + '].[' + tab.name + ']' as tabname, 
      stuff((
      select ', [' + name + ']' as [text()]
      from sys.columns col
      join sys.index_columns idc2 on idc2.object_id = tab.object_id and idc2.index_id = indexess.index_id 
           and col.column_id=idc2.column_id
          where col.object_id = tab.object_id
      order by idc2.key_ordinal       
      for xml path('')),1,1,'') as columnname, 
indexess.name as indexname, indexess.type_desc, indexess.is_primary_key, indexess.is_unique_constraint, indexess.fill_factor,indexess.is_disabled, fg.name as filegroup
from sys.tables tab
join sys.schemas sch on sch.schema_id = tab.schema_id
join sys.indexes indexess on tab.object_id = indexess.object_id
join sys.filegroups fg on fg.data_space_id = indexess.data_space_id
where tab.type_desc = 'user_table' and tab.name not like 'sysdiagrams' and tab.is_ms_shipped = '0'
and exists (select 1 from sys.index_columns idc where idc.object_id = tab.object_id and idc.index_id = indexess.index_id )
order by sch.name, tab.name, indexess.name 
3 июн 09, 13:23    [7260387]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с селектом  [new]
Kanadec
Member

Откуда: Moscow
Сообщений: 43
Anddros, спасибо большое. То что нужно.
4 июн 09, 12:02    [7264355]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить