2017-01-27 5 views

Antwort

3

Ich habe gerade dies auf SQL Server 2014 geschrieben und getestet, sollte hoffentlich mit allen Versionen arbeiten.

Select t.name [TableTypeName] 
     ,SCHEMA_NAME(t.schema_id) [SchemaName] 
     ,c.name [Column Name] 
     ,y.name [Data Type] 
     ,c.max_length 
     ,c.precision 
     ,c.is_identity 
     ,c.is_nullable 
From sys.table_types t 
Inner join sys.columns c on c.object_id = t.type_table_object_id 
Inner join sys.types y ON y.system_type_id = c.system_type_id 
WHERE t.is_user_defined = 1 
    AND t.is_table_type = 1 
+0

Haben Sie ein Äquivalent INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION gefunden? – StingyJack

+0

@StingyJack 'sys.Columns.Column_id' ist die Ordinalposition in sys-Katalogsichten. –

+0

... direkt am Anfang der Reihe. Vielen Dank! – StingyJack

0

Die Antwort @ m-ali gab Werke außer wenn Sie benutzerdefinierte Datentypen (im Grunde auf primitive Datentypen für konsistente Verwendung Aliase) haben. Um so wenig Änderungen wie möglich an dieser Abfrage vorzunehmen, sollte das Folgende für reguläre Typen und benutzerdefinierte Datentypen funktionieren, indem Sie einfach die Join-Typen vertauschen, um ein anderes Feld zu verwenden.

select t.name [tabletypename] 
    ,schema_name(t.schema_id) [schemaname] 
    ,c.name [column name] 
    ,y.name [data type] 
    ,c.max_length 
    ,c.precision 
    ,c.is_identity 
    ,c.is_nullable 
from sys.table_types t 
inner join sys.columns c on c.object_id = t.type_table_object_id 
inner join sys.types y on y.user_type_id = c.user_type_id 
where t.is_user_defined = 1 
    and t.is_table_type = 1 
Verwandte Themen