2012-12-10 100 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

相關問題