An extension of Raj's answer above
;WITH CTE
AS (SELECT OBJECT_NAME(OBJECT_ID) AS sql_module_name
,CASE
WHEN OBJECTPROPERTY(OBJECT_ID,'IsProcedure') = 1 THEN 'Stored Procedure'
WHEN OBJECTPROPERTY(OBJECT_ID,'IsScalarFunction') = 1 THEN 'Scalar Function'
WHEN OBJECTPROPERTY(OBJECT_ID,'IsTableFunction') = 1 THEN 'Table Function'
END AS sql_module_type
,parameter_id AS parameter_order
,name AS parameter_name
,is_nullable AS parameter_is_nullable_flag
,is_output AS parameter_is_output_flag
,TYPE_NAME(user_type_id) AS parameter_type
,max_length AS parameter_length
,CASE
WHEN TYPE_NAME(system_type_id) = 'uniqueidentifier' THEN precision
ELSE OdbcPrec
(system_type_id,max_length,precision
)
END AS parameter_precision
,OdbcScale
(system_type_id,scale
) AS parameter_scale
FROM sys.parameters)
SELECT DENSE_RANK() OVER(
ORDER BY sql_module_type
,sql_module_name ASC) AS group_id
,sql_module_name
,sql_module_type
,parameter_order
,parameter_name
,parameter_is_nullable_flag
,parameter_is_output_flag
,parameter_type
,parameter_length
,parameter_precision
,parameter_scale
FROM CTE
ORDER BY sql_module_type
,sql_module_name
,parameter_order;