I helped a fellow Magenicon with this detail today and thought it might be helpful to others. Note, this will only work in instances that are SQL 2005 or greater.
SELECT SCHEMA_NAME(o.[schema_id]) AS SchemaName
,o.name AS ObjectName
,REPLACE(o.type_desc, '_', ' ') AS ObjectType
,ap.parameter_id AS ParameterNumber
,ap.name AS ParameterName
,CASE
WHEN t.name IN ( 'char', 'nchar', 'varchar'
, 'nvarchar', 'binary', 'image'
, 'varbinary' ) THEN t.name
+ ' (' + CONVERT(varchar(10), ap.max_length) + ')'
WHEN t.name IN ( 'bigint', 'bit', 'int', 'money'
, 'smallint', 'smallmoney', 'tinyint'
, 'float', 'real', 'date', 'datetime2'
, 'datetime', 'smalldatetime', 'time'
, 'cursor', 'hierarchyid', 'sql_variant'
, 'table', 'timestamp', 'uniqueidentifier'
, 'xml', 'sysname', 'text', 'ntext' ) THEN t.name
WHEN t.name = 'datetimeoffset' THEN t.name
+ ' (' + CONVERT(varchar(10), ap.scale) + ')'
WHEN t.name IN ('decimal', 'numeric') THEN t.name
+ ' (' + CONVERT(varchar(10), ap.[precision])
+ ', ' + CONVERT(varchar(10), ap.scale) + ')'
ELSE 'Unknown'
END AS DataType
,CASE
WHEN ap.is_output = 1 THEN 'Yes'
ELSE 'No'
END AS IsOutputParameter
,COALESCE(ap.default_value, 'N/A') AS DefaultValue
FROM sys.all_parameters AS ap
INNER JOIN sys.objects AS o ON o.[object_id] = ap.[object_id]
INNER JOIN sys.types AS t ON t.system_type_id = ap.system_type_id
ORDER BY SchemaName
,ObjectName
,ParameterNumber;