计算主键和辅助键列的数量

时间:2014-07-07 07:36:38

标签: sql-server count key

是否有工具或查询可以将输出作为数据库表中主键和辅助键的总数?

更新答案

请注意,辅助密钥与外键不同。

所以数量为no。主键有两种方式: -

SELECT *
FROM sys.indexes i
INNER JOIN sys.tables t ON i.object_id = t.object_id AND 

t.type = 'U'
LEFT JOIN sys.extended_properties AS EP ON EP.major_id = T.[object_id]
where is_primary_key=1

OR

SELECT COUNT(*) AS 'PRIMARY_KEY_CONSTRAINT'
FROM sys.objects
WHERE type_desc IN ('PRIMARY_KEY_CONSTRAINT')

算不算。使用二级密钥:

SELECT *
FROM sys.indexes i
INNER JOIN sys.tables t ON i.object_id = t.object_id AND 

t.type = 'U'
LEFT JOIN sys.extended_properties AS EP ON EP.major_id = T.[object_id]
where is_unique=1 and is_primary_key=0

3 个答案:

答案 0 :(得分:1)

 USE database

 SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint,
    SCHEMA_NAME(schema_id) AS SchemaName, 
    OBJECT_NAME(parent_object_id) AS TableName
 FROM sys.objects  
 WHERE type_desc IN ('PRIMARY_KEY_CONSTRAINT')

 SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint,
    SCHEMA_NAME(schema_id) AS SchemaName, 
    OBJECT_NAME(parent_object_id) AS TableName
 FROM sys.objects  
 WHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT')

简单计数

SELECT COUNT(*) AS 'PRIMARY_KEY_CONSTRAINT'
 FROM sys.objects  
 WHERE type_desc IN ('PRIMARY_KEY_CONSTRAINT')

 SELECT COUNT(*) AS 'FOREIGN_KEY_CONSTRAINT'
 FROM sys.objects  
 WHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT')

答案 1 :(得分:1)

该工具是SQL,这是获得所需内容的另一种方法。比@kevchadders稍微复杂一点,但这样你也可以列出列名,类型等

计算外键

SELECT count(*) from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name
    AND Col.Table_Name = Tab.Table_Name
    AND Constraint_Type in ( 'FOREIGN KEY')
    AND Col.Table_Name in (select name from sysobjects where xtype = 'U')

计算Pirmairy键

    SELECT count(*) from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name
    AND Col.Table_Name = Tab.Table_Name
    AND Constraint_Type in ('PRIMARY KEY')
    AND Col.Table_Name in (select name from sysobjects where xtype = 'U')

对于所有表格,请显示PK和FK

FK
    SELECT *, Col.Column_Name from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name
    AND Col.Table_Name = Tab.Table_Name
    AND Constraint_Type in ('PRIMARY KEY', 'FOREIGN KEY')
    AND Col.Table_Name in (select name from sysobjects where xtype = 'U')

答案 2 :(得分:1)

你可以试试这个

SELECT    'PRIMARY KEYS' AS KeyType, COUNT(*) AS Total
FROM      sys.tables AS TB INNER JOIN
          sys.key_constraints AS KC ON KC.parent_object_id = TB.object_id
GROUP BY  KC.type

UNION

SELECT    'FOREIGN KEYS' AS KeyType, COUNT(*) AS Total
FROM      sys.tables AS TB INNER JOIN
          sys.foreign_keys AS FK ON FK.referenced_object_id = TB.object_id
GROUP BY  FK.type