sysobjects是SQL Server早期版本中就存在的系统表,用于记录当前数据库内所有用户创建和系统自带的对象的核心元信息,是数据库对象管理的重要基础表之一。

sysobjects系统表的核心字段说明
sysobjects包含多个字段,不同字段对应不同的对象属性,常用的核心字段如下:
| 字段名 | 字段含义 |
|---|---|
| name | 数据库对象的名称 |
| id | 对象的唯一标识ID |
| xtype | 对象的类型代码,不同代码对应不同类型的对象 |
| uid | 对象所属用户的ID |
| crdate | 对象的创建时间 |
xtype字段常用类型代码对照
- U:用户创建的表
- V:视图
- P:存储过程
- TR:触发器
- FN:标量函数
- IF:内嵌表值函数
常用查询示例
查询数据库中所有用户表
可以通过筛选xtype为U的记录,获取当前数据库下所有用户创建的表信息:
-- 查询所有用户表 SELECT name AS 表名, id AS 对象ID, crdate AS 创建时间 FROM sysobjects WHERE xtype = 'U' ORDER BY name;
查询指定名称的存储过程
如果需要查找名称包含特定关键词的存储过程,可以结合xtype和name字段筛选:
-- 查询名称包含user的存储过程 SELECT name AS 存储过程名, crdate AS 创建时间 FROM sysobjects WHERE xtype = 'P' AND name LIKE '%user%';
查询某个表的依赖对象
sysobjects的id字段可以和其他系统表关联,比如查询引用了指定表的所有触发器:
-- 假设要查询引用test_table表的所有触发器
SELECT o.name AS 触发器名称, o.crdate AS 创建时间
FROM sysobjects o
JOIN sysdepends d ON o.id = d.id
WHERE o.xtype = 'TR' AND d.depid = OBJECT_ID('test_table');
注意事项
sysobjects属于SQL Server 2000及更早版本的核心系统表,在SQL Server 2005及后续版本中,微软更推荐使用sys.objects目录视图来替代sysobjects,因为sys.objects的字段定义更规范,兼容性也更好。不过如果是在老版本的SQL Server环境中,或者需要兼容旧系统逻辑,仍然可以使用sysobjects完成查询。
另外直接查询系统表需要当前用户有足够的数据库权限,普通用户如果没有系统表的查询权限,执行查询时会返回权限不足的错误,需要联系数据库管理员赋予对应权限之后再操作。
sysobjectsSQL_Server系统表数据库对象修改时间:2026-06-21 10:54:22