2012-12-10 101 views
14

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

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

例如,我想列定义为myTableType

CREATE TYPE myTableType AS TABLE(
    Id INT, 
    SomeValue NVARCHAR(20) 
); 
+0

的什么版本SQL Server?你有没有理由不能使用新的DMV? – Yuck

+0

您正在为用户定义的表类型定义寻找相应的'INFORMATION_SCHEMA.COLUMNS',是吗? – billinkc

+0

@billinkc这是正确的。 – Romoku

回答

22

要获得列的列表为用户定义的表类型,运行此。你需要替换您的表名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' 
); 
+0

我正在寻找该类型的实际定义。我将编辑我的帖子以清楚地说明。 – Romoku

+0

@Romoku看我的编辑。我认为你在澄清之后正在寻找。 – Yuck

+0

是的,这是我想要的,谢谢! – Romoku

7

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

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 
3
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='varchar' OR st.name='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 AS ST ON (ST.xusertype = c.system_type_id AND ST.uid=4) 
ORDER BY tt.name, c.column_id 
+0

有用的查询,谢谢 –

2

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

不同的是,用户定义的表显示在对象浏览器中的可编程节点下,如下所示,而不是下

Custom user-defined table type

相关问题