TSQL 确定参数是否为结构化类型



我正在使用此过程来确定存储过程的参数类型。

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_typessys.types,则可以看到数据库中的所有表类型:

SELECT *
FROM sys.table_types;
SELECT *
FROM sys.types
WHERE is_table_type = 1;

您可以看到,所有表类型的system_type_id都是相同的。您可以提取它并在查询中使用。另一种方法是将上述信息存储在表变量或临时表中,并将其(LEFT JOIN)连接到sys.parameters

最新更新