SQL Server 2008 vérifier l'existence d'un index [dupliquer]

Double Possible:

liste de toutes les colonnes index & index dans la base de données SQL Server

je voudrais savoir s'il y a un moyen de vérifier si un index existe dans une base de données SQL Server pour une table spécifique basée sur le nom des colonnes:

disons que je lance le script suivant:

  CREATE NONCLUSTERED INDEX [MyIndexName]
  ON [dbo].[MyTable] ([CustomerId])
  INCLUDE ([Id],[ModificationDate],[ProductId])
  GO

Maintenant, je voudrais vérifier si l'index basé sur le nom de la table et les colonnes (et les colonnes de la inclure la clause), pas le nom de l'index réel.

(SQL Server 2008 R2)

Merci

18
demandé sur Community 2012-11-13 18:07:07

2 réponses

Essayez cette requête:

if exists(
           SELECT 1 
           FROM sys.indexes 
           WHERE name = 'INDEX' 
           AND object_id = OBJECT_ID('TABLENAME')
          )
 begin
 ....
 end
34
répondu Parado 2012-11-13 14:17:44

L'information est disponible dans le catalogue metadata views, quelque chose comme:

select ...
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 ic.index_column_id = c.column_id
where i.object_id = object_id('MyTable')
and (c.name = 'CustomerId' and ic.key_ordinal = 1 and ic.is_descending_key = 0)
or (ic.is_included_column = 1 and c.name in ('Id', 'ModificationDate', 'ProductId'));

ceci ne produit pas une réponse oui/non mais vous montre les index qui pourraient déjà couvrir celui que vous planifiez. Vous devez tenir compte à la fois de la position clé, de la direction clé et des colonnes incluses, avec des chevauchements de couverture (un index sur (K1, K2) couvre (K1), et un index qui comprend (C1, C2, C3) couvre (C1, C3). Pour un système de production réel, vous devez considérez des choses comme des colonnes implicitement incluses (par ex. les clés d'index groupées), les expressions de filtre d'index et les différences dans l'espace de données d'index (c.-à-d. partitioninig)--2-->

0
répondu Remus Rusanu 2012-11-13 14:42:19