用于检索所有表的非唯一标识符(索引)的SQL查询

时间:2014-06-27 05:47:16

标签: sql sql-server select count sql-server-2012

有没有办法计算数据库中的每个表,唯一的数量和非唯一标识符(索引)的数量

我正在使用SQL Server 2012数据库

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT t.name, 
       SUM(CASE WHEN is_unique = 1 THEN 1 ELSE 0 END) uniqueIndex, 
       SUM(CASE WHEN is_unique = 0 THEN 1 ELSE 0 END) unUniqueIndex
FROM sys.indexes i 
INNER JOIN sys.tables t ON i.object_id = t.object_id AND t.type = 'U'
GROUp BY t.name;

答案 1 :(得分:0)

Select  object_name(object_id), 
         sum(case when type = 1 then 1 else 0 end)  'Primary_Count',
        sum(case when type = 2 then 1 else 0 end) 'Unique_Count'
from sys.indexes m
group by object_id,is_unique_constraint 

Sys.Indexes将包含列类型,如果它是1表示唯一,如果它是2表示非唯一约束,如果它表示0表示特定object_id的堆。

答案 2 :(得分:0)

基于sys.tables查询,为您提供系统中的所有表,包括那些没有索引的表:

select 
    tab.name [table name]
    ,sum(case when idx.is_unique = 0 then 1 else 0 end) [unique]
    ,sum(case when idx.is_unique = 1 then 0 else 1 end) [non_unique]
from 
    sys.tables tab
    left join sys.indexes idx
    on idx.object_id = tab.object_id
group by
    tab.name