2012-12-10 18 views
14

私はユーザ定義タイプがinformation_schema.domainsに格納されていることを知っていますが、タイプtable typeのタイプの定義を得ることは可能ですか?INFORMATION_SCHEMAからテーブルタイプの定義を取得できますか?

私は実際のテーブル型の定義を探しています明確にする:

例えば私は、ユーザー定義テーブル型の列のリストを取得するにはmyTableType

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

のどのバージョン:

差は、以下に示すように、ユーザー定義テーブルの代わり表下で、オブジェクトエクスプローラでプログラミングノードの下に表示されていることですSQLサーバー?新しい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

、ユーザー定義テーブル型の列とデータ型をテーブルタイプのリストを取得します。 Management Studioを使用して

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

ちょうどあなたが通常のテーブルでできるように、カスタム/ユーザー定義テーブル型の視覚的表現にアクセスすることも可能です。

Custom user-defined table type

関連する問題