Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Lister toutes les procédures stockées avec le nom du schéma

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.