2010-12-03 58 views

回答

3

你的问题有点不清楚。这将返回至少有一个索引的所有表。

select DISTINCT OBJECT_NAME(object_id) 
from sys.indexes 
where type<>0 

或者SQL Server 2000的

select DISTINCT OBJECT_NAME(id) 
from sysindexes 
where indid<>0 
+0

Upvoting。他在SQL 2000上,所以你给出了唯一能为他工作的答案。 – DataWriter 2010-12-03 14:05:04

2
select object_name(object_id),* from sys.indexes where type <> 0 

这将返回你可以在你的数据库中找到所有的索引。但要小心,它也列出了系统表。

+0

这也将包括在所有(堆)没有索引的表。这些类型具有`0` – 2010-12-03 13:34:29

+0

@编辑并更正以显示来自sys.indexes – 2010-12-03 13:36:08

1

sys.indexes DMV应该有你要找的内容:

SELECT TableName = object_name(Object_Id) 
    , IndexName = Name 
    , IndexType = Type_Desc 

FROM sys.indexes 

的Type_Desc栏会告诉你无论你是在寻找一个堆,聚簇索引或非聚簇索引。

加入到SYS.TABLES将限制的结果,用户表,并留下了系统表:

SELECT TableName = st.Name 
    , IndexName = si.name 
    , IndexType = si.type_desc 
    FROM SYS.indexes si 
    JOIN SYS.tables st 
    ON si.object_id = st.object_id