在 sys.objects 中搜索对象时,我注意到我的 table 类型的名称列有前缀和后缀
Searching objects in sys.objects I noticed that my table types have a prefix and suffix for name column
当我 运行 查询数据库中最近的更改时,我注意到我的 table 类型带有前缀和后缀。
为什么 table 类型会这样?
SELECT type, type_desc, name, create_date, modify_date
FROM sys.objects
ORDER BY create_date desc
用户定义的 table 类型应该主要被认为是类型。这意味着当试图找到关于它们的元数据时,您的起点应该是 sys.types
(或 sys.table_types
,具体而言),您将在其中找到没有前缀或后缀命名的对象。
此外,当想要探索 table 类型的架构时,应该使用 sys.table_types
中的 type_table_object_id
来找到合适的 sys.object
,而不是尝试按名称找到它们。
在 sys.objects
中,我们可以注意到两件重要的事情 - 这些对象实际上是 sys
模式的一部分,并被标记为 is_ms_shipped
。具体而言,这些对象被视为系统对象。它们都存在于 sys
模式中,但需要唯一的名称,这是需要后缀的一个原因。它们还与其他系统对象共享 sys
架构,这表明需要前缀的原因。
所以我会说 TT_
前缀是为了避免与 sys
模式中的其他对象类型发生命名冲突,而 _47DBAE45
后缀是为了避免多个 table 类型,其中 类型本身 具有相同的名称但存在于不同的架构中。
创建了两种 Students
table 类型,一种在 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
当我 运行 查询数据库中最近的更改时,我注意到我的 table 类型带有前缀和后缀。
为什么 table 类型会这样?
SELECT type, type_desc, name, create_date, modify_date
FROM sys.objects
ORDER BY create_date desc
用户定义的 table 类型应该主要被认为是类型。这意味着当试图找到关于它们的元数据时,您的起点应该是 sys.types
(或 sys.table_types
,具体而言),您将在其中找到没有前缀或后缀命名的对象。
此外,当想要探索 table 类型的架构时,应该使用 sys.table_types
中的 type_table_object_id
来找到合适的 sys.object
,而不是尝试按名称找到它们。
在 sys.objects
中,我们可以注意到两件重要的事情 - 这些对象实际上是 sys
模式的一部分,并被标记为 is_ms_shipped
。具体而言,这些对象被视为系统对象。它们都存在于 sys
模式中,但需要唯一的名称,这是需要后缀的一个原因。它们还与其他系统对象共享 sys
架构,这表明需要前缀的原因。
所以我会说 TT_
前缀是为了避免与 sys
模式中的其他对象类型发生命名冲突,而 _47DBAE45
后缀是为了避免多个 table 类型,其中 类型本身 具有相同的名称但存在于不同的架构中。
创建了两种 Students
table 类型,一种在 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