SQL sever 中系统表sys.objects的做用与字段含义

  • 0 定义

        官方对sys.objects的定义:在数据库中建立的每一个用户定义的架构做用域内的对象在该表中均对应一行。 sql

        这种翻译,真心的无力吐槽。咱们用中文再翻译下这句中文:你在库中建立一张表,这里就会记录一条。 数据库

  • 1 查看

        执行脚本看下它的样子。 架构

SELECT * FROM sys.objects

  • 2 表中字段解释
序号 列名 数据类型 说明
1 name sysname 对象名。
2 object_id int 对象标识号。  在数据库中是惟一的。  
3 principal_id int 若是不是架构全部者,则为单个全部者的 ID。  默认状况下,架构包含的对象由架构全部者拥有。  不过,经过使用 ALTER AUTHORIZATION 语句更改全部权能够指定备用全部者。  若是没有备用的单个全部者,则为 NULL。若是对象类型为下列类型之一,则为 NULL:
C = CHECK 约束
D = DEFAULT(约束或独立)
F = FOREIGN KEY 约束
PK = PRIMARY KEY 约束
R = 规则(旧式,独立)
TA = 程序集(CLR 集成)触发器
TR = SQL 触发器
UQ = UNIQUE 约束
4 schema_id int 包含该对象的架构的 ID。始终包含在sys或INFORMATION_SCHEMA架构中的架构做用域内的系统对象。
5 parent_object_id int 此对象所属对象的 ID。
0 = 不是子对象。
6 type char(2) 对象类型:
AF = 聚合函数 (CLR)
C = CHECK 约束
D = DEFAULT(约束或独立)
F = FOREIGN KEY 约束
FN = SQL 标量函数
FS = 程序集 (CLR) 标量函数
FT = 程序集 (CLR) 表值函数
IF = SQL 内联表值函数
IT = 内部表
P = SQL 存储过程
PC = 程序集 (CLR) 存储过程
PG = 计划指南
PK = PRIMARY KEY 约束
R = 规则(旧式,独立)
RF = 复制筛选过程
S = 系统基表
SN = 同义词
SO = 序列对象
适用范围:SQL Server 2012 到 SQL Server 2016。
SQ = 服务队列
TA = 程序集 (CLR) DML 触发器
TF = SQL 表值函数
TR = SQL DML 触发器
TT = 表类型
U = 表(用户定义类型)
UQ = UNIQUE 约束
V = 视图
X = 扩展存储过程
7 type_desc nvarchar(60) 对对象类型的说明:
AGGREGATE_FUNCTION
CHECK_CONSTRAINT
CLR_SCALAR_FUNCTION
CLR_STORED_PROCEDURE
CLR_TABLE_VALUED_FUNCTION
CLR_TRIGGER
DEFAULT_CONSTRAINT
EXTENDED_STORED_PROCEDURE
FOREIGN_KEY_CONSTRAINT
INTERNAL_TABLE
PLAN_GUIDE
PRIMARY_KEY_CONSTRAINT
REPLICATION_FILTER_PROCEDURE
RULE
SEQUENCE_OBJECT
适用范围:SQL Server 2012 到 SQL Server 2016。
SERVICE_QUEUE
SQL_INLINE_TABLE_VALUED_FUNCTION
SQL_SCALAR_FUNCTION
SQL_STORED_PROCEDURE
SQL_TABLE_VALUED_FUNCTION
SQL_TRIGGER
SYNONYM
SYSTEM_TABLE
TABLE_TYPE
UNIQUE_CONSTRAINT
USER_TABLE
View
8 create_date datetime 对象的建立日期。
9 modify_date datetime 上次使用 ALTER 语句修改对象的日期。  若是对象为表或视图,则建立或修改表或视图的汇集索引时,modify_date 也会随之更改。  
10 is_ms_shipped bit 对象由内部 SQL Server 组件建立。
11 is_published bit 对象为发布对象。
12 is_schema_published bit 仅发布对象的架构。

  • 3 有什么做用

        3.1 你能够用下面的命令列出感兴趣的全部对象 函数

SELECT * FROM sysobjects WHERE xtype = <type of interest>

SELECT * FROM sysobjects WHERE xtype = 'V'  --例如:查看视图
        3.2 判断数据库中是否已经存在某个表,有的话就删除该表
----方法一:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and type='U'))
drop table [dbo].[表名]

----方法二:
if exists (Select * From sysObjects Where type='U' And Name='表名')) 
drop table [dbo].[表名]
        通常建议不要更新此表,可是查询仍是OK的。
相关文章
相关标签/搜索