Existe-t-il un moyen d'interroger la base de données et de récupérer une liste de toutes les procédures stockées et de leurs paramètres ?
J'utilise SQL Server 2000.
Réponses
Trop de publicités?Pour obtenir des informations sur les procédures stockées :
SELECT * FROM INFORMATION_SCHEMA.ROUTINES
Pour trouver les sprocs commençant par un certain préfixe (par exemple "usp") :
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME LIKE 'usp%'
Pour trouver tous les paramètres d'une procédure stockée :
SELECT * FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME='YourSprocName'
Pour trouver tous les paramètres de toutes les procédures stockées commençant par un certain préfixe :
SELECT * FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME LIKE 'usp%'
Pour afficher une liste de toutes les procédures et de leurs paramètres, il faudrait procéder de la manière suivante :
SELECT o.name AS [Procedure name], p.name as [Parameter name]
FROM sys.parameters p INNER JOIN sysobjects o ON p.object_id = o.id
WHERE o.name LIKE 'prefix%' AND o.xtype = 'P'
Cela fonctionne dans SQL Server 2016 mais je suppose que cela fonctionne aussi dans les versions plus anciennes.
La requête suivante renvoie les procédures, fonctions et filtres par un préfixe. Je ne suis pas sûr, cependant, que cela fonctionne sur sql server 2000. Je la laisse ici en référence de toute façon, parce que c'est une bonne requête utile.
SELECT SCHEMA_NAME(SCHEMA_ID) AS [Schema],
SO.name AS [ObjectName],
SO.Type_Desc AS [ObjectType (UDF/SP)],
COALESCE(P.parameter_id,0) AS [ParameterID],
COALESCE(P.name, 'NO PARAMETER') AS [ParameterName],
COALESCE(TYPE_NAME(P.user_type_id),'') AS [ParameterDataType],
COALESCE(P.max_length,0) AS [ParameterMaxBytes],
COALESCE(P.is_output,0) AS [IsOutPutParameter]
FROM sys.objects AS SO
LEFT OUTER JOIN sys.parameters AS P
ON SO.OBJECT_ID = P.OBJECT_ID
WHERE SO.OBJECT_ID IN ( SELECT OBJECT_ID
FROM sys.objects
WHERE TYPE IN ('P','FN'))
AND SO.NAME LIKE 'U%' --starting with a certain prefix
ORDER BY [Schema], SO.name, P.parameter_id
GO