web-dev-qa-db-fra.com

Répertorie toutes les procédures stockées avec un nom de schéma

Est-ce que quelqu'un peut conseiller sur une façon de lister toutes les procédures stockées avec leurs noms de schéma dans une base de données? Merci!

10
daniness
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 efficaces dans ce cas car elles reposent sur des fonctions sensibles au contexte):

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 le faire 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 collate sont nécessaires si vous avez des bases de données avec des collations différentes.

28
Aaron Bertrand

Essaye ça:

SELECT 
    SchemaName = s.name,
    ProcedureName = pr.name 
FROM 
    sys.procedures pr
INNER JOIN 
    sys.schemas s ON pr.schema_id = s.schema_id

Cela devrait répertorier toutes les procédures stockées et leur nom de schéma en tant que jeu de résultats.

Les deux vues - sys.procedures et sys.schemas - ont quelques attributs supplémentaires. Vérifiez-les, si vous en avez besoin, incluez-les dans votre requête.

12
marc_s

cela peut vous aider .. 

SELECT * FROM sys.procedures;

2
SonalPM
SELECT name,crdate  FROM dbo.sysobjects WHERE (type = 'P')  order by name 

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

select OBJECT_SCHEMA_NAME([object_id]) as 'SchemaName',name as 'SP Name ' ,

create_date,modify_date FROM sys.procedures order by OBJECT_SCHEMA_NAME([object_id]), name 
0
Krushna

Vous pouvez utiliser Script Generator pour les obtenir. Dans le volet de gauche, cliquez avec le bouton droit de la souris sur la base de données pour laquelle vous souhaitez obtenir des procédures stockées. Tâches-> Générer des scripts. Cliquez sur Suivant, choisissez Sélectionner des objets de base de données spécifiques, sélectionnez Procédures stockées et cliquez sur Suivant. les scripts.

0
Sravan U

Essaye ça:

execute [sys].[sp_stored_procedures]

Ou essayez ceci et obtenez également tous les paramètres:

execute [sys].[sp_sproc_columns]

Ok ... vous devrez parcourir tous les noms de catalogue DB avec ceci, mais ...

0
Robert Achmann