如何计算数据库中存储过程的数量,并且存储过程太多是不好的做法?
答案 0 :(得分:12)
Select count(*) from sysobjects where xtype = 'P'
答案 1 :(得分:6)
Select count(1) from information_schema.routines
where routine_type = 'PROCEDURE'
答案 2 :(得分:2)
您可能希望从计数中排除系统存储过程
一种方法是致电:
select count(*) from sysobjects
where xtype = 'P'
and category = 0
and left(name,2) <> 'sp'
假设您没有为sp
添加前缀答案 3 :(得分:1)
您需要尽可能多的应用程序。保持程序小而简单是一件好事。
如果您正在使用sql 2005,那么查看proc计数的可视方式是在可编程性下在SSMS中导航到存储过程节点。单击View-Object Explorer Details,右侧将显示对象计数。
答案 4 :(得分:1)
以下是您可以使用的查询:
select count(*) from sysobjects where xtype='P'
如果要求所有数据库访问都通过SP,那么天空就是限制。
答案 5 :(得分:1)
这将排除使用图表工具时有时会创建的那些(它们将以dt _开头)
SELECT * FROM information_schema.routines
WHERE OBJECTPROPERTY(OBJECT_ID(SPECIFIC_NAME),'IsMSShipped') =1
AND routine_type = 'PROCEDURE'
答案 6 :(得分:0)
如果你使用它们,那么确实没有“太多”这样的东西。
我有一个开发人员担心他的存储过程在数据库中占用了太多空间,所以我必须实际计算所有存储过程的总SIZE。 Good answer for that here.结果是,存储过程的大小总共占数据库总大小的0.001%。
答案 7 :(得分:0)
您可以使用以下简单查询:
SELECT COUNT(object_id) FROM sys.procedures
答案 8 :(得分:0)
通过该查询,您将获得数据库中所有proc中实际文本的数据量。 结果以字节为单位,因此MB结果(1024 * 1024)的数学运算也是如此。 除以1048576
SELECT SUM(DATALENGTH(sm.definition))/1048576 as 'Total Proc text size'
FROM sys.sql_modules sm
INNER JOIN sys.sysobjects so ON sm.object_id = so.id
WHERE so.type = 'P'