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
你能添加一个截图吗?