获取用户定义的表类型的列信息

时间:2017-01-27 23:43:34

标签: sql sql-server

我需要获取用户定义的表类型列的所有信息(名称,类型,是否为null) 所以我可以为我得到的所有表类型生成一个备份脚本。

2 个答案:

答案 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