2012-10-18 2 views
-1

SQL Server에서 데이터베이스의 모든 외래 키 인덱스 목록을 표시 할 쿼리를 찾고 있습니다. 내 데이터베이스 내에서 많은 인덱스를 가지고 있고 일부는 테이블의 외래 키에 있으며 외래 키와 기본 키에 대한 인덱스를 제외한 모든 인덱스를 삭제하려고합니다.외래 키 인덱스를 가져 오는 쿼리

답변

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