2015-11-10 56 views
0

我想检查我的数据库中的所有表是否具有哪种类型的列(例如:int)和聚集索引是在单个/多个列上的clusterd索引。我无法弄清楚哪些DMvs或视图需要检索这些信息。请帮忙。DMV获取索引配置信息

回答

1

下面的sql会给你一些clusterd索引和表名的列表,更多的细节。你可以修改这个来得到你的结果。

SELECT 'ClusteredIndexName' = SI.Name, 
     'TableName' = SO.Name, 
     'ColumCount' = IK.IndexColumnCount, 
     'IsUnique' = CASE WHEN SI.is_unique = 0 THEN 'N' ELSE 'Y' END 
     ,SI.type_desc 
FROM SYS.INDEXES SI     

JOIN SYS.OBJECTS SO     -- Joining on SYS.OBJECTS to get the TableName 
    ON SO.OBJECT_ID = SI.Object_ID 

JOIN (        -- Joining on a Derived view to work out how many columns exist on the clustered index 
     SELECT 'IndexColumnCount' = MAX(KEY_ORDINAL), OBJECT_ID, index_id 
     FROM SYS.INDEX_COLUMNS 
     GROUP BY OBJECT_ID, index_id  
    ) AS IK      
    ON IK.object_id = SI.Object_ID 
AND IK.index_id = SI.index_id 

WHERE SI.type_desc = 'CLUSTERED' and     
    SI.OBJECT_ID NOT IN (SELECT OBJECT_ID 
       FROM SYS.ALL_OBJECTS 
       WHERE TYPE = 'S')  -- Not system tables 
    AND SO.Type = 'U' 
    AND SO.is_ms_shipped = 0 
+0

非常感谢您......这就是我一直在寻找的东西。我们应该找到包含在索引中的列的数据类型吗? – Ramya

+0

请看这篇文章http://stackoverflow.com/questions/765867/list-of-all-index-index-columns-in-sql-server-db – Hiten004

0

通过Sql Server Management Studio,您可以查看表中所有索引的定义。在表格文件夹中找到表格,展开并展开索引。选择特定索引上的属性以查看列和其他属性。

+0

是的我知道,但我有一个庞大的数据库与大量的索引。而不是全部搜索,我有一个查询来获得信息一次? – Ramya

0

SELECT * FROM sys.indexes(我认为,自从我使用SQL Server以来,它已经有一段时间了)。