Sql server 如何计算SQL Server 2008中存储过程和表的总数

Sql server 如何计算SQL Server 2008中存储过程和表的总数,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我在SQLServer2008R2中有数据库Test1。在实时服务器上,我从那里获取了备份,并在本地机器上恢复为Test2,并添加了一些表和过程 SELECT CASE TYPE WHEN 'U' THEN 'User Defined Tables' WHEN 'S' THEN 'System Tables' WHEN 'IT' THEN 'Internal T

我在SQLServer2008R2中有数据库
Test1
。在实时服务器上,我从那里获取了备份,并在本地机器上恢复为
Test2
,并添加了一些表和过程

SELECT 
    CASE TYPE 
        WHEN 'U' 
            THEN 'User Defined Tables' 
        WHEN 'S'
            THEN 'System Tables'
        WHEN 'IT'
            THEN 'Internal Tables'
        WHEN 'P'
            THEN 'Stored Procedures'
        WHEN 'PC'
            THEN 'CLR Stored Procedures'
        WHEN 'X'
            THEN 'Extended Stored Procedures'
    END, 
    COUNT(*)     
FROM SYS.OBJECTS
WHERE TYPE IN ('U', 'P', 'PC', 'S', 'IT', 'X')
GROUP BY TYPE
如果我们将
Test2
恢复到live server上,那么是否有任何查询可以获取表名和过程名,而这些表名和过程名仅在测试2中,而不在测试1中,或者SQL server将其视为完全不同的数据库


如果我只想知道
Test1
Test2
数据库的差异数,那么查询是什么?这将为您提供表和存储过程的计数

SELECT 
    CASE TYPE 
        WHEN 'U' 
            THEN 'User Defined Tables' 
        WHEN 'S'
            THEN 'System Tables'
        WHEN 'IT'
            THEN 'Internal Tables'
        WHEN 'P'
            THEN 'Stored Procedures'
        WHEN 'PC'
            THEN 'CLR Stored Procedures'
        WHEN 'X'
            THEN 'Extended Stored Procedures'
    END, 
    COUNT(*)     
FROM SYS.OBJECTS
WHERE TYPE IN ('U', 'P', 'PC', 'S', 'IT', 'X')
GROUP BY TYPE
您可以在
sys.objects
中找到数据库中所有类型的对象。您必须在每个数据库上运行此查询才能查看对象的计数


您可以找到有关存储在
sys.objects

中的内容的所有信息。您可以使用以下两种查询:

select count(*) as TablesCount from sys.tables
select count(*) as ProceduresCount from sys.procedures

我经常使用我在上找到的这个脚本

您可以根据有关的信息按类型修改它

或者通过此参考中的对象,因为您在前面的答案中已经得到了表和过程的答案,例如

SELECT count(*) AS MyTables FROM sys.tables
SELECT count(*) AS MyProcedures FROM  sys.procedures
SELECT count(*) AS MyTriggers FROM  sys.triggers
SELECT count(*) AS MyViews FROM  sys.views

希望这能给您一些额外的帮助

使用以下查询

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbName';
USE YOURDBNAME
SELECT COUNT(*) AS totalTable from information_schema.tables 
WHERE table_type = 'base table'  

select Count(*) AS TotalProc from sys.procedures

我现在使用下面的,基于Milica的答案,加上一些额外的类型、默认值和按计数排序

SELECT 'Count' = COUNT(*), 'Type' = CASE type 
    WHEN 'AF' THEN 'Aggregate function (CLR)' 
    WHEN 'C' THEN 'CHECK constraints' 
    WHEN 'D' THEN 'Default or DEFAULT constraints' 
    WHEN 'F' THEN 'FOREIGN KEY constraints' 
    WHEN 'FN' THEN 'Scalar functions' 
    WHEN 'FS' THEN 'Assembly (CLR) scalar-function' 
    WHEN 'FT' THEN 'Assembly (CLR) table-valued function' 
    WHEN 'IF' THEN 'Inlined table-functions' 
    WHEN 'IT' THEN 'Internal table' 
    WHEN 'K' THEN 'PRIMARY KEY or UNIQUE constraints' 
    WHEN 'L' THEN 'Logs' 
    WHEN 'P' THEN 'Stored procedures' 
    WHEN 'PC' THEN 'Assembly (CLR) stored-procedure' 
    WHEN 'PG' THEN 'Plan guide' 
    WHEN 'PK' THEN 'PRIMARY KEY constraint' 
    WHEN 'R' THEN 'Rules' 
    WHEN 'RF' THEN 'Replication filter stored procedures' 
    WHEN 'S' THEN 'System tables' 
    WHEN 'SN' THEN 'Synonym' 
    WHEN 'SO' THEN 'Sequence object' 
    WHEN 'SQ' THEN 'Service queue' 
    WHEN 'TF' THEN 'Table functions' 
    WHEN 'TR' THEN 'Triggers' 
    WHEN 'U' THEN 'User tables' 
    WHEN 'UQ' THEN 'UNIQUE constraint' 
    WHEN 'V' THEN 'Views' 
    WHEN 'X' THEN 'Extended stored procedures' 
    ELSE type
END 
FROM sys.objects 
GROUP BY type 
ORDER BY 'Count' desc

使用此脚本。它没有使用switch case语句

USE [MyDatabase]
GO
select distinct type_desc as 'Type Description', Count from
(SELECT 'Count' = COUNT(*), type FROM sys.objects GROUP BY type) as dbstatistics 
left join sys.objects on dbstatistics.type = sys.objects.type ORDER BY Count desc
GO

除了
P
之外,难道没有像
PC
(Assembly)这样的存储过程类型吗?@TimSchmelter我不知道这样的情况,我会更新我的查询。
X
也可能是一个存储过程-请参阅相关问题以获取列表。@Bridge我刚才在做:-)如果你对这个答案投了反对票,而大多数人对它投了赞成票,我很想知道你的理由是什么。然后我也许可以改进我的答案(这对社区的帮助不仅仅是简单的向下投票)。