列出具有模式名称的所有存储过程

dan*_*ess 11 stored-procedures sql-server-2008 database-schema

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

Aar*_*and 29

SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
  name
FROM sys.procedures;
Run Code Online (Sandbox Code Playgroud)

要么

SELECT [schema] = SCHEMA_NAME([schema_id]),
  name
FROM sys.procedures;
Run Code Online (Sandbox Code Playgroud)

对于特定的数据库,您可以先将该上下文更改为该数据库,或稍微更改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;
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

如果您拥有具有不同排序规则的数据库,则必须使用collat​​e子句.


mar*_*c_s 12

试试这个:

SELECT 
    SchemaName = s.name,
    ProcedureName = pr.name 
FROM 
    sys.procedures pr
INNER JOIN 
    sys.schemas s ON pr.schema_id = s.schema_id
Run Code Online (Sandbox Code Playgroud)

这应该列出所有存储过程及其架构名称作为结果集.

两个视图 - sys.procedures以及sys.schemas- 还有更多属性 - 如果需要,请检查它们,将它们包含在查询中.