Sql server 在sys.objects中搜索对象我注意到我的表类型的name列有前缀和后缀

Sql server 在sys.objects中搜索对象我注意到我的表类型的name列有前缀和后缀,sql-server,ssms,Sql Server,Ssms,当我对数据库中最近的更改运行以下查询时,我注意到我的表类型带有前缀和后缀 为什么表类型是这样 SELECT type, type_desc, name, create_date, modify_date FROM sys.objects ORDER BY create_date desc 用户定义的表类型应主要视为类型。这意味着,当尝试查找有关它们的元数据时,您的起点应该是sys.types(或者特别是sys.table_types),在这里您可以找到没有前缀或后缀的命名对象 此外,当想要探索

当我对数据库中最近的更改运行以下查询时,我注意到我的表类型带有前缀和后缀

为什么表类型是这样

SELECT type, type_desc, name, create_date, modify_date
FROM sys.objects
ORDER BY create_date desc

用户定义的表类型应主要视为类型。这意味着,当尝试查找有关它们的元数据时,您的起点应该是
sys.types
(或者特别是
sys.table_types
),在这里您可以找到没有前缀或后缀的命名对象

此外,当想要探索一个表类型的模式时,应该使用
sys.table\u types
中的
type\u table\u object\u id
来找到合适的
sys.object
,而不是试图通过名称来定位它们

sys.objects
中,我们可以注意到两件重要的事情-这些对象实际上是
sys
模式的一部分,并且标记为
is\ms\u shipped
。具体而言,这些对象被视为系统对象。它们都存在于
sys
模式中,但需要唯一的名称,这说明了需要后缀的一个原因。它们还与其他系统对象共享
sys
模式,这说明了需要前缀的原因

因此我想说,
TT
前缀是为了避免与
sys
模式中的其他对象类型发生命名冲突,
\u 47DBAE45
后缀是为了避免多个表类型之间的冲突,其中类型本身具有相同的名称,但存在于不同的模式中


创建了两个
Students
表类型,一个在
dbo
(如问题所示)中,一个在
Xyz
中,我运行以下查询:

select SCHEMA_NAME(tt.schema_id), tt.name,
       SCHEMA_NAME(so.schema_id),so.name,
      so.is_ms_shipped
from sys.table_types tt
inner join sys.objects so
    on tt.type_table_object_id = so.object_id
显示以下结果:

              name                  name                    is_ms_shipped
------------- ----------- --------- ----------------------- -------------
dbo           Students    sys       TT_Students_01142BA1    1
Xyz           Students    sys       TT_Students_02FC7413    1

你能添加一个截图吗?