2012-10-18 59 views
-1

我正在寻找一个查询在sql服务器,将显示我的数据库中的所有外键索引列表。我有一堆索引在我的数据库中,一些是在表的外键,我正在寻找放弃除了外键和主键的索引外的所有索引。查询获得外键索引

回答

2

也许第一个答案的扭曲能做到这一点的?:雅

SELECT 
    sc.name + '.' + t.name as tableName, 
    OBJECT_NAME(fkc.constraint_object_id) AS [FKey-Name], 
    OBJECT_NAME(fkc.referenced_object_id) ReferencedTable, 
c.name as ColumnName 
, i.name AS ReferencedKeyName 
FROM sys.foreign_key_columns fkc 
JOIN sys.index_columns ic ON ic.object_id = fkc.parent_object_id 
    AND ic.column_id = fkc.parent_column_id 
JOIN sys.indexes i ON i.index_id = ic.index_id 
    AND i.object_id = ic.object_id 
JOIN sys.columns c ON c.object_id = ic.object_id 
    AND c.column_id = ic.column_id 
JOIN sys.tables t ON t.object_id = c.object_id 
JOIN sys.schemas sc ON sc.schema_id = t.schema_id 
WHERE t.is_ms_shipped = 0 
ORDER BY tableName, OBJECT_NAME(fkc.constraint_object_id), columnName 
0
SELECT fk.name, 
     OBJECT_NAME(fk.parent_object_id) AS parent_table, 
     c1.name AS parent_column, 
     OBJECT_NAME(fk.referenced_object_id) AS referenced_table, 
     c2.name AS referenced_column 
    FROM sys.foreign_keys fk 
     INNER JOIN sys.foreign_key_columns fkc 
      ON fk.object_id = fkc.constraint_object_id 
     INNER JOIN sys.columns c1 
      ON fkc.parent_object_id = c1.object_id 
       AND fkc.parent_column_id = c1.column_id 
     INNER JOIN sys.columns c2 
      ON fkc.referenced_object_id = c2.object_id 
       AND fkc.referenced_column_id = c2.column_id 
+0

,这样给了我限制,但不是索引名 –

+0

,这样仍然只是给我的表和列,但而不是索引名称 –

2

下面是一个查询,它会根据您的需要来做。

SELECT 
sc.name + '.' + t.name as tableName, 
i.name as indexName, 
c.name as columnName 
FROM sys.foreign_key_columns fkc 
JOIN sys.index_columns ic ON ic.object_id = fkc.parent_object_id 
    AND ic.column_id = fkc.parent_column_id 
JOIN sys.indexes i ON i.index_id = ic.index_id 
    AND i.object_id = ic.object_id 
JOIN sys.columns c ON c.object_id = ic.object_id 
    AND c.column_id = ic.column_id 
JOIN sys.tables t ON t.object_id = c.object_id 
JOIN sys.schemas sc ON sc.schema_id = t.schema_id 
where t.is_ms_shipped = 0 
ORDER BY tableName, indexName, columnName