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

Sql server TSQL确定参数是否为结构化类型,sql-server,tsql,Sql Server,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

我使用这个过程来确定存储过程的参数类型

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\u type
sys.types
您可以看到数据库中的所有表类型:

SELECT *
FROM sys.table_types;

SELECT *
FROM sys.types
WHERE is_table_type = 1;

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

如果查询
sys.table\u types
sys.types
,则可以看到数据库中的所有表类型:

SELECT *
FROM sys.table_types;

SELECT *
FROM sys.types
WHERE is_table_type = 1;
您可以看到,
system\u type\u id
对于所有表类型都是相同的。您可以提取它并在查询中使用。另一种方法是将上述信息存储在表变量或临时表中,并将其(左连接)连接到
sys.parameters