所有的参数都是存在 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;
结果: