关于SQL Server中的系统表之一 sysobjects
- 2019 年 10 月 4 日
- 笔记
微软Sql Server数据库是企业开发管理中最常用的数据库系统之一。其功能强大而且使用简单、方便。我们在数据库中创建数据库、表、视图、触发器、存储过程、函数等信息。
最常用的功能之一,查询数据,例如:
1 SELECT [SysAreaId] 2 ,[AreaName] 3 ,[AreaNamePinYin] 4 ,[ShortName] 5 ,[AreaTypeId] 6 ,[Depth] 7 ,[ParentId] 8 ,[PostCode] 9 FROM [SavionPlatMisDB].[dbo].[SysArea]
查询结果如下图:

从上图结果看出,查询结果是以网状行、列形式展示出来的。这就是关系型数据库的特性之一。
那么我们创建的表、视图等信息是如何存储的呢?其实SQL Server数据库是一种“自解释”性是存储介质。我们创建的表、视图等也是存储在其系统默认数据库与表中。
其中之一就是sysobjects表。
SQL Server的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。
以下是此系统表的字段名称和相关说明。
列名 |
数据类型 |
描述 |
---|---|---|
name |
sysname |
对象名。 |
Id |
int |
对象标识号。 |
xtype |
char(2) |
对象类型。可以是下列对象类型中的一种: C = CHECK 约束D = 默认值或 DEFAULT 约束F = FOREIGN KEY 约束L = 日志FN = 标量函数IF = 内嵌表函数P = 存储过程PK = PRIMARY KEY 约束(类型是 K)RF = 复制筛选存储过程S = 系统表TF = 表函数TR = 触发器U = 用户表UQ = UNIQUE 约束(类型是 K)V = 视图X = 扩展存储过程 |
uid |
smallint |
所有者对象的用户 ID。 |
info |
smallint |
保留。仅限内部使用。 |
status |
int |
保留。仅限内部使用。 |
base_schema_ver |
int |
保留。仅限内部使用。 |
replinfo |
int |
保留。供复制使用。 |
parent_obj |
int |
父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。 |
crdate |
datetime |
对象的创建日期。 |
ftcatid |
smallint |
为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。 |
schema_ver |
int |
版本号,该版本号在每次表的架构更改时都增加。 |
stats_schema_ver |
int |
保留。仅限内部使用。 |
type |
char(2) |
对象类型。可以是下列值之一: C = CHECK 约束D = 默认值或 DEFAULT 约束F = FOREIGN KEY 约束FN = 标量函数IF = 内嵌表函数K = PRIMARY KEY 或 UNIQUE 约束L = 日志P = 存储过程R = 规则RF = 复制筛选存储过程S = 系统表TF = 表函数TR = 触发器U = 用户表V = 视图X = 扩展存储过程 |
userstat |
smallint |
保留。 |
sysstat |
smallint |
内部状态信息。 |
indexdel |
smallint |
保留。 |
refdate |
datetime |
留作以后使用。 |
version |
int |
留作以后使用。 |
deltrig |
int |
保留。 |
instrig |
int |
保留。 |
updtrig |
int |
保留。 |
seltrig |
int |
保留。 |
category |
int |
用于发布、约束和标识。 |
cache |
smallint |
保留。 |
当xtype='U' and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。
用以下代码就可以列出库misa中所有的用户建立的表名:
1 select * from dbo.sysobjects 2 where xtype='U'and status>0