16

任何人都可以建议在数据库中列出所有存储过程及其模式名称的方法吗?谢谢!

4

7 回答 7

34
SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
  name
FROM sys.procedures;

或者

SELECT [schema] = SCHEMA_NAME([schema_id]),
  name
FROM sys.procedures;

对于特定的数据库,您可以先将上下文更改为该数据库,或者稍微更改 Marc 的查询(在这种情况下我的查询不好,因为它们依赖于上下文敏感的函数):

SELECT 
    SchemaName = s.name,
    ProcedureName = pr.name 
FROM 
    databasename.sys.procedures pr
INNER JOIN 
    databasename.sys.schemas s ON pr.schema_id = s.schema_id;

如果要对所有数据库执行此操作:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
  UNION ALL SELECT db = N''' + name + ''', 
    s.name COLLATE Latin1_General_CI_AI,
    o.name COLLATE Latin1_General_CI_AI
  FROM ' + QUOTENAME(name) + '.sys.procedures AS o
  INNER JOIN ' + QUOTENAME(name) + '.sys.schemas AS s
  ON o.[schema_id] = s.[schema_id]'
FROM sys.databases
-- WHERE ... -- probably don't need system databases at least

SELECT @sql = STUFF(@sql, 1, 18, '') 
  -- you may have to adjust  ^^ 18 due to copy/paste, cr/lf, tabs etc 
  + ' ORDER BY by db, s.name, o.name';

EXEC sp_executesql @sql;

如果您的数据库具有不同的排序规则,则排序规则子句是必需的。

于 2012-09-27T13:49:40.690 回答
13

尝试这个:

SELECT 
    SchemaName = s.name,
    ProcedureName = pr.name 
FROM 
    sys.procedures pr
INNER JOIN 
    sys.schemas s ON pr.schema_id = s.schema_id

这应该将所有存储过程及其模式名称作为结果集列出。

两个视图 -sys.procedures并且sys.schemas- 都有更多属性 - 检查它们,如果您需要它们,请将它们包含在您的查询中。

于 2012-09-27T13:49:14.913 回答
2

如果要搜索具有所需架构名称的 proc,可以使用以下查询:

SELECT 
    SchemaName = s.name,
    ProcedureName = pr.name 
FROM 
    sys.procedures pr
INNER JOIN 
    sys.schemas s 
ON pr.schema_id = s.schema_id
WHERE s.name = 'YOUR_SCHEMA_NAME'
ORDER BY SchemaName;
于 2019-11-14T13:20:35.940 回答
1

这可能会帮助你..

选择 * 从 sys.procedures;

于 2014-10-07T11:44:25.420 回答
0

尝试这个:

execute [sys].[sp_stored_procedures]

或者试试这个并获取所有参数:

execute [sys].[sp_sproc_columns]

好的...您必须使用它遍历所有数据库目录名称,但是...

于 2015-04-16T15:18:08.683 回答
0

您可以使用脚本生成器来获取它们。在左窗格中右键单击要为其获取存储过程的数据库,任务->生成脚本单击下一步并选择选择特定数据库对象并选择存储过程并单击下一步,您可以根据需要自定义并生成脚本。

于 2015-01-05T07:14:14.853 回答
0
SELECT name,crdate  FROM dbo.sysobjects WHERE (type = 'P')  order by name 

SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),name FROM sys.procedures;

select OBJECT_SCHEMA_NAME([object_id]) as 'SchemaName',name as 'SP Name ' ,

create_date,modify_date FROM sys.procedures order by OBJECT_SCHEMA_NAME([object_id]), name 
于 2016-10-21T06:39:28.173 回答