任何人都可以建议将所有存储过程及其模式名称列在数据库中的方式吗?谢谢!列出模式名称的所有存储过程
回答
试试这个:
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
- 有更多的属性 - 检查出来,如果你需要它们,将它们包含在你的查询中。
感谢您的建议,我将如何使用它来列出特定数据库的所有存储过程及其模式? – daniness
@daniness:转到该数据库('use(yourdatabase)'),然后执行此片段代码,它仅适用于您当前所在的数据库 –
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;
如果您拥有不同排序规则的数据库,collate子句是必需的。
这可能会帮助你..
SELECT * FROM sys.procedures;
它不会返回所有程序 –
您可以使用脚本生成器来获取它们。在左侧的平移中,右键单击要获取存储过程的任务数据库,任务 - >生成脚本单击下一步,然后选择选择特定数据库对象并选择存储过程,然后单击下一步,您可以根据需要自定义并生成脚本。
试试这个:
execute [sys].[sp_stored_procedures]
或尝试这一点,也得到所有的参数:
execute [sys].[sp_sproc_columns]
好吧...你会通过这一切DB目录名称必须循环,但。 ..
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
为它添加一些说明,它为什么会起作用以及它如何工作。 – piyushj
- 1. Oracle存储过程名称
- 2. 使用SP模式名称的所有存储过程中使用的表的列表
- 3. 在存储过程中调用带有输出参数的存储过程 - 无效的列名称
- 4. 列出所有没有参数的存储过程
- 5. 列出oracle存储过程名称与原始案例
- 6. 没有执行存储过程的列名称
- 7. 存储过程的存储库模式
- 8. 存储过程的模式?
- 9. 编程:列出实体框架模型中的所有存储过程
- 10. Weblogic:调用没有模式名称的DB2存储过程(属性currentSchema)
- 11. 动态表存储过程的名称
- 12. Get调用存储过程的名称
- 13. 按创建日期列出的所有存储过程?
- 14. 如何列出Informix中的所有存储过程?
- 15. 存储库模式和存储过程
- 16. 如何在Apache Ignite 2.1中的一个缓存中列出所有缓存名称和所有列名称?
- 17. 查找具有特定起始名称的所有存储过程
- 18. 列出所有列元素名称
- 19. 通过jndi列出JMSBroker的所有队列名称
- 20. 如何列出所有非系统存储过程?
- 21. 抛出异常时,有在所选列(存储过程)
- 22. 存储过程:变量表名称
- 23. 存储过程名称标记
- 24. 按名称删除存储过程组
- 25. DataSet存储过程表名称
- 26. 仅复制存储过程名称
- 27. 按名称查找存储过程
- 28. 获取当前正在执行的存储过程的模式名称
- 29. 更快的正则表达式提取存储过程名称
- 30. 用于存储配置信息(如存储过程名称)的良好格式
尝试'select * from DatabaseName.information_schema.routines where routine_type ='PROCEDURE'' – aserwin
谢谢,aserwin和marc_s。我怎么知道这将列出这个数据库的所有存储过程b/c我运行这个并获得了164行,相比之下,当我运行另一个查询,我没有保存,所以我不知道它是什么:-(。 – daniness