我正在使用此过程来确定存储过程的参数类型。
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')
但是如果参数是表值,那么我将获得类型名称。
如何确定它是否为"结构化"类型?
如果查询sys.table_types
或sys.types
,则可以看到数据库中的所有表类型:
SELECT *
FROM sys.table_types;
SELECT *
FROM sys.types
WHERE is_table_type = 1;
您可以看到,所有表类型的system_type_id
都是相同的。您可以提取它并在查询中使用。另一种方法是将上述信息存储在表变量或临时表中,并将其(LEFT JOIN)连接到sys.parameters
。