-1

我正在 sql server 中寻找一个查询,它将显示我的数据库中所有外键索引的列表。我的数据库中有一堆索引,其中一些在表的外键上,我希望删除所有索引,除了那些针对外键和主键的索引。

4

3 回答 3

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
于 2012-10-18T19:38:30.423 回答
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
于 2012-10-18T21:00:00.650 回答
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
于 2012-10-18T19:22:40.177 回答