最好的方式是使用information_schema。只要你不在master库上,系统存储过程就不会返回。
SELECT * FROM DATABASENAME.INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE'
如果由于某种原因,在master数据库中有非系统存储过程,则可以使用查询(这将过滤掉大多数系统存储过程):
SELECT * FROM MASTER.INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' AND LEFT( ROUTINE_NAME, 3 ) NOT IN( 'SP_', 'XP_', 'MS_' )
参考文献
Query to list all stored procedures:https://stackoverflow.com/questions/219434/query-to-list-all-stored-procedures