2012-09-27 34 views
9

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

+1

尝试'select * from DatabaseName.information_schema.routines where routine_type ='PROCEDURE'' – aserwin

+0

谢谢,aserwin和marc_s。我怎么知道这将列出这个数据库的所有存储过程b/c我运行这个并获得了164行,相比之下,当我运行另一个查询,我没有保存,所以我不知道它是什么:-(。 – daniness

回答

8

试试这个:

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

这应当列出所有的存储过程和他们的架构名称作为结果集。

这两个视图 - sys.proceduressys.schemas - 有更多的属性 - 检查出来,如果你需要它们,将它们包含在你的查询中。

+0

感谢您的建议,我将如何使用它来列出特定数据库的所有存储过程及其模式? – daniness

+0

@daniness:转到该数据库('use(yourdatabase)'),然后执行此片段代码,它仅适用于您当前所在的数据库 –

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

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

对于一个特定的数据库,你可以改变的背景下,以该数据库第一,或者稍微改变马克的查询(我的查询不再在这种情况下很好的,因为它们依赖功能这是上下文敏感的):

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; 

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

2

这可能会帮助你..

SELECT * FROM sys.procedures;

+0

它不会返回所有程序 –

0

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

0

试试这个:

execute [sys].[sp_stored_procedures] 

或尝试这一点,也得到所有的参数:

execute [sys].[sp_sproc_columns] 

好吧...你会通过这一切DB目录名称必须循环,但。 ..

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

为它添加一些说明,它为什么会起作用以及它如何工作。 – piyushj

相关问题