我需要获取用户定义的表类型列的所有信息(名称,类型,是否为null) 所以我可以为我得到的所有表类型生成一个备份脚本。
答案 0 :(得分:8)
我刚刚在SQL Server 2014上编写并测试了这个,希望能够适用于所有版本。
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
答案 1 :(得分:1)
@ m-ali给出了答案,除非您有用户定义的数据类型(基本上是原始数据类型的别名以便一致使用)。对于该查询中尽可能少的更改,通过交换类型连接以使用不同的字段,以下内容应适用于常规类型和用户定义的数据类型。
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