SQL Server用户定义类型的目录视图位置及sys.objects不显示问题
关于sys.objects与自定义类型的目录视图疑问
为什么sys.objects查不到自定义类型?
虽然官方文档说明sys.objects包含数据库内用户定义的架构范围对象,但SQL Server对不同类型的架构范围对象做了细分,自定义标量类型并不属于sys.objects的覆盖范围。sys.objects主要收录表、视图、存储过程、触发器、函数这类常规可编程/存储对象,而自定义类型有专门的目录视图来管理。
你创建的dbo.provider自定义标量类型,需要在sys.types中查询,测试已经验证有效。
为什么sys.types不在对象目录视图概述里?
你查阅的那份文档是「对象目录视图」的集合页,而sys.types属于类型目录视图分类,和对象目录视图是平行的不同分类,所以不会出现在那个页面里。SQL Server的系统目录视图是按对象类别划分的,不同类别的对象对应不同的视图组。
还有哪些类似的架构范围对象不在sys.objects里?
这类由专属视图管理的架构范围对象还有不少,举几个常见的:
- 自定义表类型:需查询
sys.table_types - XML架构集合:需查询
sys.xml_schema_collections - 分区函数:需查询
sys.partition_functions - 序列对象:需查询
sys.sequences - CLR聚合函数:需查询
sys.aggregates
附测试代码:
use master; go create database testtttt; go use testtttt; go select * -- 无结果 from sys.objects where name = 'provider'; create table dbo.provider (x int); select * -- 可看到表 from sys.objects where name = 'provider'; -- 创建隶属于dbo的类型 create type dbo.provider from int; select * -- 仅能看到表,看不到类型 from sys.objects where name = 'provider'; -- 验证自定义类型需查sys.types select * from sys.types where name = 'provider'; use master; go drop database testtttt; go
(测试环境:select @@version = Microsoft SQL Server 2014 (SP3-GDR))
内容的提问来源于stack exchange,提问作者user3779002
相关产品推荐
相关产品推荐

