查询以列出所有存储过程

什么查询可以返回SQL Server数据库中所有存储过程的名称

如果查询可能排除系统存储过程,那将更有帮助。

正如Mike所说,最好的方法是使用information_schema 。 只要您不在主数据库中,系统存储过程将不会被返回。

 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 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 

以下将返回所选数据库中的所有程序

 SELECT * FROM sys.procedures 

这也可以帮助列出除系统程序之外的程序:

 select * from sys.all_objects where type='p' and is_ms_shipped=0 

不幸的是, INFORMATION_SCHEMA不包含关于系统特效的信息。

 SELECT * FROM sys.objects WHERE objectproperty(object_id, N'IsMSShipped') = 0 AND objectproperty(object_id, N'IsProcedure') = 1 

select所有存储过程和视图

 select name,type,type_desc from sys.objects where type in ('V','P') order by name,type 
 select * from dbo.sysobjects where xtype = 'P' and status > 0 

这列出你想要的所有东西

在Sql Server 2005,2008,2012中:

 Use [YourDataBase] EXEC sp_tables @table_type = "'PROCEDURE'" EXEC sp_tables @table_type = "'TABLE'" EXEC sp_tables @table_type = "'VIEW'" 

要么

 SELECT * FROM information_schema.tables SELECT * FROM information_schema.VIEWS 

我写了这个简单的tsql来列出所有存储过程的文本。 请务必在字段中replace您的数据库名称。

 use << database name >> go declare @aQuery nvarchar(1024); declare @spName nvarchar(64); declare allSP cursor for select p.name from sys.procedures p where p.type_desc = 'SQL_STORED_PROCEDURE' order by p.name; open allSP; fetch next from allSP into @spName; while (@@FETCH_STATUS = 0) begin set @aQuery = 'sp_helptext [Extract.' + @spName + ']'; exec sp_executesql @aQuery; fetch next from allSP; end; close allSP; deallocate allSP; 

这将只给出存储过程的名称。

 select specific_name from information_schema.routines where routine_type = 'PROCEDURE'; 

您可以使用以下查询之一在一个数据库中查找存储过程的列表:

查询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 

我已经调整了LostCajun的优秀post以排除系统存储过程。 我也删除了“Extract”。 从代码,因为我无法弄清楚它是什么,它给了我错误。 循环内的“取下一个”语句也需要一个“into”子句。

 use <<databasename>> go declare @aQuery nvarchar(1024); declare @spName nvarchar(64); declare allSP cursor for select p.name from sys.procedures p where p.type_desc = 'SQL_STORED_PROCEDURE' and LEFT(p.name,3) NOT IN ('sp_','xp_','ms_') order by p.name; open allSP; fetch next from allSP into @spName; while (@@FETCH_STATUS = 0) begin set @aQuery = 'sp_helptext [' + @spName + ']'; exec sp_executesql @aQuery; fetch next from allSP into @spName; end; close allSP; deallocate allSP; 

这将返回所有的SP名称

 Select * FROM sys.procedures where [type] = 'P' AND is_ms_shipped = 0 AND [name] not like 'sp[_]%diagram%' 

列出特定MySQL数据库的存储过程:

 SHOW PROCEDURE STATUS WHERE db = 'databaseName'; 

试试这个codeplex链接,这个工具帮助本地化从sql数据库的所有存储过程。

https://exportmssqlproc.codeplex.com/