2008-10-23 4 views

Répondre

7

Je n'ai pas de base de données immédiatement à portée de main pour tester cela, mais vous devriez être capable de voir si une colonne existe dans un index en utilisant l'instruction IF EXISTS suivante.

Je ne suis pas sûr si vous pouvez modifier un index à la volée.

IF EXISTS 
(
    SELECT MyIndex.Name AS IndexName, 
      Columns.name AS ColumnName 
    FROM sys.indexes MyIndex 
    INNER JOIN sys.index_columns IndexColumns 
     ON MyIndex.index_id = IndexColumns.index_id 
     AND MyIndex.object_id = IndexColumns.object_id 
    INNER JOIN sys.columns Columns 
     ON Columns.column_id = IndexColumns.column_id 
     AND IndexColumns.object_id = Columns.object_id 
    WHERE Columns.name = 'ColumnName' 
    AND MyIndex.Name='IX_MyIndexName' 
) 
4

Merci pour votre aide, éd. Voici la solution que j'ai écrite en utilisant le vôtre comme un début. Cela a été vérifié. Fondamentalement, il a toutes les bonnes jointures.

 

IF EXISTS 
(
    SELECT i.Name AS IndexName, c.Name AS ColumnName 
    FROM sys.indexes i 
     JOIN sys.index_columns ic 
      ON i.object_id = ic.object_id AND i.index_id = ic.index_id 
     JOIN sys.columns c 
      ON ic.object_id = c.object_id AND c.column_id = ic.column_id 
    WHERE c.Name = 'MyColumnName' AND i.Name='MyIndexName' 
) 
 
+0

J'ai corrigé ma réponse pour inclure cette autre condition de jointure. Je suis content que je puisse être utile. Vous pourriez envisager de marquer votre ou ma réponse comme correcte. –

Questions connexes