我想检查数据库中的所有表是否都有关于哪种类型的列的聚簇索引(例如:int)以及聚簇索引是否在单/多列上。我无法确定哪些DMV或视图可以检索此信息。请帮忙。
答案 0 :(得分:1)
下面的sql将为您提供集群索引和表名的列表,其中包含更多详细信息。你可以修改它来得到你的结果。
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
答案 1 :(得分:0)
使用Sql Server Management Studio可以查看表中所有索引的定义。在Tables文件夹中找到该表,展开并展开Indexes。选择特定索引上的“属性”以查看列和其他属性。
答案 2 :(得分:0)
SELECT * FROM sys.indexes(我想,自从我使用SQL Server以来已经有一段时间了。)