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

6
我需要获取用户自定义表类型的所有信息(名称、类型、是否可空),以便生成备份脚本。
2个回答

16

我刚刚在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

不错。我刚刚添加了两个过滤器,以便根据我的要求获取精确信息:AND t.name = 'MyTableName' AND y.name = 'varchar' - Ashish Kumar Jaryal
@M.Ali 上述解决方案存在一个小问题。请在将sys.types与sys.columns连接时,将您的ON子句添加一个条件,即Inner join sys.types y ON y.system_type_id = c.system_type_id AND y.user_type_id = c.user_type_id - GaryTheBrave

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接