繁体   English   中英

如何统计SQL服务器中一个数据库的所有存储过程?

[英]How to count all stored procedures in the SQL Server for a database?

如何计算我在数据库中编写的所有存储过程?

select Count(*) from sys.procedures

正如 Philip Kelley 指出的,这是 sql 2005 及更高版本

-- Information about table -- 
SELECT * FROM sys.sysobjects WHERE xtype = 'U'

-- Information about Stored Procedure --
SELECT * FROM sys.sysobjects WHERE xtype = 'P'

-- Information about Functions --
SELECT * FROM sys.sysobjects WHERE xtype = 'FN'

-- Information about Views --
SELECT * FROM sys.sysobjects WHERE xtype = 'V'

要获取存储过程计数:

SELECT COUNT(*) SPCOUNT 
  FROM INFORMATION_SCHEMA.ROUTINES
 WHERE ROUTINE_TYPE='PROCEDURE'

或:

SELECT COUNT(*)
  FROM sys.procedures

或:

SELECT COUNT(*) 
  FROM sys.sysobjects
 WHERE xtype = 'P'

希望其中之一有所帮助。

正如 OP 在评论中指出的那样,所有较早的答案都是错误的,因为它们包含系统过程。 他特别要求提供“由我编写”的程序——后来在另一条评论中澄清说“除了系统程序,由我或任何在该数据库上工作的人编写”。

因此,为了排除系统过程,我在 sys.procedures 中看到的唯一区分字段是名称。 因此,您需要在任何其他答案中添加 WHERE 子句,如下所示:

select count(*) from sys.procedures
where name not like 'sp_%'
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
select count(name)
from sys.objects
where type = 'P'
select count(*)
from sysobjects
where xtype='P'

这将为您提供表和存储过程的计数。

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 '扩展存储过程' END, COUNT(*)
从 SYS.OBJECTS WHERE TYPE IN ('U', 'P', 'PC', 'S', 'IT', 'X') GROUP BY TYPE

您可以在 sys.objects 中找到数据库中所有类型的对象。 您必须在每个数据库上运行此查询才能查看对象数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM