SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
name
FROM sys.procedures;
ou
SELECT [schema] = SCHEMA_NAME([schema_id]),
name
FROM sys.procedures;
Pour une base de données spécifique, vous pouvez d'abord modifier le contexte de cette base de données ou modifier légèrement la requête de Marc (mes requêtes ne sont pas bonnes dans ce cas car elles reposent sur des fonctions contextuelles) :
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;
Si vous voulez faire cela pour toutes les bases de données :
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;
Les clauses de collation sont nécessaires au cas où vous auriez des bases de données avec des collations différentes.