什么查询可以返回SQL Server数据库中所有存储过程的名称
如果查询可以排除系统存储过程,那将更有帮助.
正如迈克所说,最好的方法是使用information_schema
.只要您不在master数据库中,就不会返回系统存储过程.
select * from DatabaseName.information_schema.routines where routine_type = 'PROCEDURE'
如果由于某种原因,您在master数据库中有非系统存储过程,则可以使用该查询(这将过滤掉MOST系统存储过程):
select * from master.information_schema.routines where routine_type = 'PROCEDURE' and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_')
SELECT name, type FROM dbo.sysobjects WHERE (type = 'P')
根据我的理解,"首选"方法是使用information_schema表:
select * from information_schema.routines where routine_type = 'PROCEDURE'
以下将在所选数据库中返回所有过程
SELECT * FROM sys.procedures
您可以尝试此查询以获取存储过程和函数:
SELECT name, type FROM dbo.sysobjects WHERE type IN ( 'P', -- stored procedures 'FN', -- scalar functions 'IF', -- inline table-valued functions 'TF' -- table-valued functions ) ORDER BY type, name
如果您使用的是SQL Server 2005,则以下内容将起作用:
select * from sys.procedures where is_ms_shipped = 0
您可以使用以下查询之一在一个数据库中查找存储过程列表:
查询1:
SELECT * FROM sys.procedures;
查询2:
SELECT * FROM information_schema.routines WHERE ROUTINE_TYPE = 'PROCEDURE'
如果要查找所有数据库中所有SP的列表,可以使用以下查询:
CREATE TABLE #ListOfSPs ( DBName varchar(100), [OBJECT_ID] INT, SPName varchar(100) ) EXEC sp_msforeachdb 'USE [?]; INSERT INTO #ListOfSPs Select ''?'', Object_Id, Name FROM sys.procedures' SELECT * FROM #ListOfSPs
选择所有存储过程和视图
select name,type,type_desc from sys.objects where type in ('V','P') order by name,type