2012-10-18 47 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