所有的参数都是存在 sys.parameters 这个表中的,我们可以仿造 sql得到表中的列信息 这篇中的sql语句(提示:我们在表值函数中创建的表,最后我们是返回这个表的,我们可以用这个sql语句得到表值函数中返回的列信息)
SELECT sp.name ParameterName,
obj.name ObjName,
systype.name ObjType,
sp.is_output IsOutPut,
CAST(sp.max_length AS INT) ByteLength, -- sys.columns中的max_length是字节
(CASE
WHEN systype.name = 'nvarchar'
AND sp.max_length > 0 THEN
sp.max_length / 2
WHEN systype.name = 'nchar'
AND sp.max_length > 0 THEN
sp.max_length / 2
WHEN systype.name = 'ntext'
AND sp.max_length > 0 THEN
sp.max_length / 2
ELSE
sp.max_length
END
) CharLength,
CAST(sp.precision AS INT) Precision,
CAST(sp.scale AS INT) Scale,
sep.value Remark
FROM sys.parameters sp
LEFT JOIN sys.objects obj
ON sp.object_id = obj.object_id
AND obj.type IN ( 'FN', 'P', 'TF' ) --FN:标量,TF:表值,P:存储过程
INNER JOIN sys.types systype
ON sp.system_type_id = systype.system_type_id
AND systype.user_type_id = sp.user_type_id
LEFT JOIN sys.extended_properties sep
ON sep.major_id = sp.object_id --得到是这个表的
AND sp.parameter_id = sep.minor_id --这列的
WHERE sp.parameter_id != 0;
结果: