是否可以从INFORMATION_SCHEMA获取表类型定义?

时间:2012-12-10 17:53:28

标签: sql-server tsql sql-server-2008-r2

我知道用户定义的类型存储在information_schema.domains中,但是是否可以获取类型为table type的类型的定义?

要清楚我正在寻找实际的表类型定义:

e.g。我想获取myTableType

的列定义
CREATE TYPE myTableType AS TABLE(
     Id INT,
     SomeValue NVARCHAR(20)
);

5 个答案:

答案 0 :(得分:28)

要获取用户定义的表类型的列列表,请运行此列。您需要将您的表名替换为some_table_type

SELECT *
FROM sys.columns
WHERE object_id IN (
  SELECT type_table_object_id
  FROM sys.table_types
  WHERE name = 'some_table_type'
);

答案 1 :(得分:9)

获取用户定义的表类型的表类型,列和数据类型列表。

select tt.name AS table_Type, c.name AS table_Type_col_name,st.name AS   
table_Type_col_datatype
from sys.table_types tt
inner join sys.columns c on c.object_id = tt.type_table_object_id
INNER JOIN sys.systypes AS ST  ON ST.xtype = c.system_type_id

答案 2 :(得分:6)

获取列名,其类型和可为空性的详细信息:

SELECT tt.name     AS Table_Type,
  c.name           AS Column_Name,
  st.name          AS Datatype, 
  CASE WHEN st.name = 'numeric' THEN '(' + Convert(varchar(5), c.precision) + ',' + Convert(varchar(5), c.scale) + ')' 
  WHEN st.name IN ('char', 'nchar', 'varchar', 'nvarchar') THEN '(' + Convert(varchar(5), c.max_length) + ')' 
  ELSE '' END      AS Size,
  CASE WHEN c.is_nullable = 0 THEN 'NOT NULL,'
  ELSE ',' END     AS Nullable
FROM sys.table_types tt
  INNER JOIN sys.columns c ON c.object_id = tt.type_table_object_id
  INNER JOIN sys.systypes st ON (st.xusertype = c.system_type_id AND st.uid = 4)
ORDER BY tt.name, c.column_id

答案 3 :(得分:2)

使用Management Studio,还可以访问自定义/用户定义的表类型的可视化表示,就像使用常规表一样。

不同之处在于,用户定义的表格显示在对象资源管理器中的 可编程性 节点下,如下所示,而不是 Tables < / EM>

Custom user-defined table type

答案 4 :(得分:0)

用更少的代码,使用 sys.dm_exec_describe_first_result_set 你可以做这样的事情:

SELECT * FROM sys.dm_exec_describe_first_result_set  (N'DECLARE @TEST myTableType ; SELECT * FROM @TEST', null, 0) ; 

以下是一些列:

enter image description here