2016-05-24 66 views
1

我正在使用此過程來確定存儲過程的參數類型。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') 

但是,如果參數是表值,那麼我得到的類型的名稱。

如何確定它是否是「結構化」類型?

回答

0

如果查詢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

相關問題