根据列/表名称选择索引

时间:2009-07-13 15:35:25

标签: sql sql-server-2005

是否有系统SP或dmv允许我根据列和表名选择数据库中的索引?

我要做的是基于具有字符串数据类型的列删除索引,因为我正在更改我的排序规则设置。

感谢。

2 个答案:

答案 0 :(得分:4)

您始终可以通过查询sys.indexes和sys.index_columns视图来确定给定列和/或表的索引:

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

马克

答案 1 :(得分:1)

您需要四个系统视图:

sys.indexes,sys.index_columns,sys.columns和sys.objects。 sys.objects包含table,sys.columns的名称。包含table的object_id和列的类型,sys.index_columns包含索引和索引id中存在的列id,sys.indexes包含索引id。

编辑:是的,不需要sys.objects。坦克@mark。