2009-07-13 14 views
0

Gibt es ein System-SP oder dmv, mit dem ich Indizes in meiner Datenbank anhand von Spalten und Tabellennamen auswählen kann?Auswählen von Indizes basierend auf Spalten-/Tabellennamen

Ich versuche, Indizes basierend auf Spalten mit String-Datentypen zu löschen, während ich gerade meine Sortiereinstellungen ändere.

Danke.

Antwort

3

Sie können immer die Indizes für eine bestimmte Spalte und/oder Tabelle bestimmen, indem die sys.indexes Abfrage und sys.index_columns Ansichten:

SELECT 
    i.Name 'Index Name', 
    OBJECT_NAME(i.object_ID) 'Table Name', 
    c.Name 'Column Name' 
FROM 
    sys.indexes i 
INNER JOIN 
    sys.index_columns ic ON i.index_id = ic.index_id AND i.object_id = ic.object_id 
INNER JOIN 
    sys.columns c ON ic.column_id = c.column_id AND ic.object_id = c.object_id 
WHERE 
    c.name = 'Index column name'  -- this for a column name 
    -- OBJECT_NAME(i.OBJECT_ID) = 'Table Name' -- this for table name 

Marc

+0

brilliant, danke! – super9

1

Sie benötigen vier Systemaufrufe:

sys.indexes, sys.index_columns, sys.columns und sys.objects. sys.objects enthält den Namen der Tabelle sys.columns. enthält object_id der Tabelle und den Typ der Spalte, sys.index_columns enthält Spalten-IDs, die in den Indizes und der Index-ID vorhanden sind, sys.indexes enthält die Index-ID.

bearbeiten: ja, sys.objects ist nicht erforderlich. Tanks @mark.

Verwandte Themen