SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
name
FROM sys.procedures;
of
SELECT [schema] = SCHEMA_NAME([schema_id]),
name
FROM sys.procedures;
Voor een specifieke database kun je eerst de context naar die database wijzigen, of de zoekopdracht van Marc iets wijzigen (mijn zoekopdrachten zijn in dit geval niet goed omdat ze afhankelijk zijn van functies die contextgevoelig zijn):
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;
Als u dit voor alle databases wilt doen:
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;
De sorteerclausules zijn nodig als u databases met verschillende sorteringen heeft.