与用户定义表一样,SQL Server在系统视图中存储用户定义表类型及其列的定义,例如:
drop type if exists dbo.ABCTest;
create type dbo.ABCTest as table (
TestID int not null,
TestName nvarchar(50)
);
declare @type_table_object_id int = (
select type_table_object_id
from sys.table_types
where [name] = N'ABCTest'
);
select * from sys.table_types where type_table_object_id = @type_table_object_id;
select * from sys.all_columns where object_id = @type_table_object_id;
|
名称
|
system\u type\u id
|
user\u type\u id
|
schema\u id
|
principal\u id
|
最大\u长度
|
精确
|
规模
|
排序规则\u名称
|
is\u可为Null
|
是否定义了\u user\u
|
is\U assembly\U类型
|
默认\u object\u id
|
rule\u object\u id
|
is\U table\U类型
|
type\u table\u object\u id
|
\u memory\u是否已优化
|
|
ABCTest测试
|
243
|
257
|
1.
|
无效的
|
-1
|
0
|
0
|
无效的
|
0
|
1.
|
0
|
0
|
0
|
1.
|
1778105375
|
0
|
|
对象\u id
|
名称
|
列\u id
|
system\u type\u id
|
user\u type\u id
|
最大\u长度
|
精确
|
规模
|
排序规则\u名称
|
is\u可为Null
|
是否有ansi\U填充
|
is\U rowguidcol
|
is\U标识
|
is\U计算
|
is\U文件流
|
是否复制了\u
|
是否订阅了\u non\u sql\u
|
\u merge\u是否已发布
|
是否复制了\u dts\u
|
is\u xml\u文档
|
xml\u集合\u id
|
默认\u object\u id
|
rule\u object\u id
|
is\u稀疏
|
is\U column\U集合
|
生成的\u always\u类型
|
生成的\u always\u type\u desc
|
encryption\u类型
|
加密\u type\u desc
|
encryption\u algorithm\u名称
|
column\u encryption\u key\u id
|
column\u encryption\u key\u database\u name列
|
是否隐藏\u
|
是否被屏蔽
|
graph\u类型
|
graph\u type\u描述
|
|
1778105375
|
测试ID
|
1.
|
56
|
56
|
4.
|
10
|
0
|
无效的
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
不适用
|
无效的
|
无效的
|
无效的
|
无效的
|
无效的
|
0
|
0
|
无效的
|
无效的
|
|
1778105375
|
测试名称
|
2.
|
231
|
231
|
100
|
0
|
0
|
拉丁文1\u General\u 100\u CI\u AS
|
1.
|
1.
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
不适用
|
无效的
|
无效的
|
无效的
|
无效的
|
无效的
|
0
|
0
|
无效的
|
无效的
|
您可以根据此信息重新生成用户定义表类型的SQL定义,以实现用不同的名称重新创建它,但正如SMor在评论中所说的那样,让SMO为您完成这项工作可能更容易。