什么查询可以返回SQL Server数据库中所有存储过程的名称
如果查询可以排除系统存储过程,那将更有帮助。
什么查询可以返回SQL Server数据库中所有存储过程的名称
如果查询可以排除系统存储过程,那将更有帮助。
当前回答
正如Mike所说,最好的方法是使用information_schema。只要不在主数据库中,系统存储过程就不会返回。
SELECT *
FROM DatabaseName.INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
如果出于某种原因,主数据库中有非系统存储过程,可以使用查询(这会过滤掉大多数系统存储过程):
SELECT *
FROM [master].INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
AND LEFT(ROUTINE_NAME, 3) NOT IN ('sp_', 'xp_', 'ms_')
其他回答
在SQL server中选择存储过程列表。更多信息请参考这里: https://coderrooms.blogspot.com/2017/06/select-list-of-stored-procedure-in-sql.html
SELECT name,
type
FROM dbo.sysobjects
WHERE (type = 'P')
这将只给出存储过程的名称。
select specific_name
from information_schema.routines
where routine_type = 'PROCEDURE';
您可以使用以下查询之一来查找一个数据库中的存储过程列表:
Query1:
SELECT
*
FROM sys.procedures;
Query2:
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
获取对象的最佳方法是使用sys.sql_modules。您可以从这个表中找到所需的所有内容,并通过object_id将这个表与其他表连接起来以获取更多信息
SELECT o. object_id,o.name AS name,o.type_desc,m.definition,schemas.name scheamaName
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.OBJECT_ID
INNER JOIN sys.schemas ON schemas.schema_id = o.schema_id
WHERE [TYPE]='p'