SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
name
FROM sys.procedures;
lub
SELECT [schema] = SCHEMA_NAME([schema_id]),
name
FROM sys.procedures;
W przypadku określonej bazy danych możesz po prostu najpierw zmienić kontekst na tę bazę danych lub nieznacznie zmienić zapytanie Marca (moje zapytania w tym przypadku nie są dobre, ponieważ opierają się na funkcjach kontekstowych):
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;
Jeśli chcesz to zrobić dla wszystkich baz danych:
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;
Klauzule sortowania są niezbędne w przypadku, gdy masz bazy danych z różnymi sortowaniami.