Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Alle gespeicherten Prozeduren mit Schemanamen auflisten

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

oder

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

Für eine bestimmte Datenbank können Sie einfach zuerst den Kontext zu dieser Datenbank ändern oder Marcs Abfrage leicht ändern (meine Abfragen sind in diesem Fall nicht gut, weil sie auf Funktionen angewiesen sind, die kontextsensitiv sind):

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;

Wenn Sie dies für alle Datenbanken tun möchten:

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;

Die Collate-Klauseln sind notwendig, falls Sie Datenbanken mit unterschiedlichen Sortierungen haben.