Où puis-je trouver des informations sur les paramètres de procédure stockée? Dans ma situation, je n'ai besoin de connaître que les paramètres d'entrée d'une procédure de stockage donnée.
Dans le sys.objects
, il n'y a que des détails communs sur la procédure. Dans sys.sql_modules
, je peux extraire le texte SQL complet d'une procédure.
En tant que (dans SQL Server Management Studio), je peux extraire des informations sur les paramètres dans la vue tabulaire en utilisant ALT+F1
lors de la sélection du nom de la procédure. J'espère qu'il y a un endroit où je peux extraire les détails des paramètres d'entrée de cette manière.
select
'Parameter_name' = name,
'Type' = type_name(user_type_id),
'Length' = max_length,
'Prec' = case when type_name(system_type_id) = 'uniqueidentifier'
then precision
else OdbcPrec(system_type_id, max_length, precision) end,
'Scale' = OdbcScale(system_type_id, scale),
'Param_order' = parameter_id,
'Collation' = convert(sysname,
case when system_type_id in (35, 99, 167, 175, 231, 239)
then ServerProperty('collation') end)
from sys.parameters where object_id = object_id('MySchema.MyProcedure')
select * from sys.parameters
inner join sys.procedures on parameters.object_id = procedures.object_id
inner join sys.types on parameters.system_type_id = types.system_type_id AND parameters.user_type_id = types.user_type_id
where procedures.name = 'sp_name'
Pour un nom de procédure fourni, la requête suivante répertorie tous ses paramètres et leur ordre avec leur type, si le type est nullable et sa longueur (pour une utilisation avec VARCHAR, etc.)
Remplacez procedure_name
par le nom de votre procédure.
DECLARE @ProcedureName VARCHAR(MAX) = 'procedure_name'
SELECT
pa.parameter_id AS [order]
, pa.name AS [name]
, UPPER(t.name) AS [type]
, t.is_nullable AS [nullable]
, t.max_length AS [length]
FROM
sys.parameters AS pa
INNER JOIN sys.procedures AS p on pa.object_id = p.object_id
INNER JOIN sys.types AS t on pa.system_type_id = t.system_type_id AND pa.user_type_id = t.user_type_id
WHERE
p.name = @ProcedureName
ORDER BY
t.is_nullable DESC
Il contient une ligne pour chaque paramètre d'un objet qui accepte des paramètres. Si l'objet est une fonction scalaire, il existe également une seule ligne décrivant la valeur de retour. Cette ligne aura une valeur parameter_id de 0.
SELECT *
FROM sys.parameters
WHERE object_id = object_id('SchemaName.ProcedureName')
Il y a les tables système, comme sys.objects
ou sys.sysobjects
.
Vous pouvez également consulter INFORMATION_SCHEMA
, en particulier INFORMATION_SCHEMA.ROUTINES
et INFORMATION_SCHEMA.ROUTINE_COLUMNS
.
Comme il est dans le INFORMATION_SCHEMA
ANSI-standard, il y a moins de bizarreries spécifiques à SQL Server. À mon humble avis, il est plus facile à comprendre pour la plupart des choses.
Probablement un peu tard, mais puisque le terme de recherche Get parameters for all stored procedure on SQL
sur google m'a atterri cette page, je vais poster cette solution (qui est aussi un peu différente des autres réponses en termes de participation).
Select PROCS.name As StoredProcName,TYPE_NAME(user_type_id) As ParameterType,PARAMS.name As Params from sys.procedures PROCS
JOIN sys.parameters PARAMS WITH(NOLOCK) ON PROCS.object_id = PARAMS.object_id
Order by PROCS.object_id
SELECT *
FROM INFORMATION_SCHEMA.PARAMETERS
WHERE SPECIFIC_NAME='proc_name'
ORDER BY ORDINAL_POSITION
(testé avec MSSQL 2014)
La requête suivante a fonctionné pour moi:
SELECT * FROM sys.parameters sp1, sys.procedures sp2 WHERE sp1.object_id = sp2.object_id
Pour un résultat plus spécifique avec l'ordre des paramètres:
SELECT * FROM sys.parameters sp1, sys.procedures sp2, sys.types st WHERE sp1.object_id = sp2.object_id AND sp2.name = 'usp_nameofstoredprocedure' AND sp1.user_type_id = st.user_type_id ORDER BY sp1.parameter_id asc;