sql - stored - ¿Cómo obtener los detalles de los parámetros del procedimiento almacenados?
procedimiento almacenado sql server select (5)
¿Dónde puedo encontrar información sobre los parámetros del procedimiento almacenado? En mi situación, necesito saber solo los parámetros de entrada de un procedimiento de almacenamiento determinado.
En sys.objects
solo hay detalles comunes sobre el procedimiento. En sys.sql_modules
puedo extraer todo el texto SQL de un procedimiento.
Como (en el estudio de SQL Server Management) puedo extraer información sobre los parámetros en la vista tabular usando ALT+F1
al seleccionar el nombre del procedimiento, espero que haya algún lugar desde donde pueda extraerlos de esa manera.
Existen las tablas del sistema, como sys.objects
o sys.sysobjects
.
O también puede consultar INFORMATION_SCHEMA
, específicamente INFORMATION_SCHEMA.ROUTINES
e INFORMATION_SCHEMA.ROUTINE_COLUMNS
.
Debido a que está en el ANSI-estándar INFORMATION_SCHEMA
, hay menos peculiaridades específicas de SQL Server. En mi humilde opinión es más fácil de entender para la mayoría de las cosas.
Para un nombre de procedimiento proporcionado, la siguiente consulta enumera todos sus parámetros y su orden junto con su tipo, si el tipo es anulable y la longitud del tipo (para usar con VARCHAR, etc.)
Reemplace procedure_name
con el nombre de su procedimiento.
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
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''
select t1.[name] as [SP_name],t2.[name] as [Parameter_name],
t3.[name] as [Type],t2.[Length],t2.colorder as [Param_order]
from sysobjects t1
inner join syscolumns t2 on t1.[id]=t2.[id]
inner join systypes t3 on t2.xtype=t3.xtype
where t1.[name]=''My_StoredProc_Name''
order by [Param_order]