数据分析之SQL系统表

浏览: 857

这里主要是整理些常用系统表的知识点,有时候面试数据分析的时候会问到的。先给大家出一道面试题目:
已知道一个用户表的名字是 brands,如何查找出表中的所有列名字呢?

看完下面的内容,你肯定会明白的

一:Sysobjects表

Sysobjects 主要存放着数据库中的所有对象,如表,列,索引等等。字段xtype代表对象类型,比如u代表用户表,p代表存储过程,tr代表触发器等。name字段表示对象名称。

如: select * from sysobjects where xtype='u'

二:Syscolumns表

当前数据库的所有字段都保留在里面。

select col.name,obj.name 
from syscolumns col join sysobjects obj
 on col.id=obj.id where obj.xtype='u' 

这时候,我们再来回顾下刚刚的问题,因为表示用户表,所以xtype='u' ,对象名字就是'brands',所以结合Sysobjects表、Syscolumns表,容易查找出来。

select obj.name,col.name
 from syscolumns  col join  sysobjects 
 obj on col.id=obj.id where obj.type='u'
and obj.name='brands'

3.systypes
保存当前数据库中的所有数据类型,包含系统提供的数据类型和用户定义的数据类型。比如查看所有的用户表

select obj.name from systypes stype  join sysobjects obj
on stype.id=obj.id where xtype='u'


其中xtype分别对应:

C = CHECK 约束 
D = 默认值或 DEFAULT 约束 
F = FOREIGN KEY 约束 
FN = 标量函数 
IF = 内嵌表函数 
K = PRIMARY KEY 或 UNIQUE 约束 
L = 日志 
P = 存储过程 
R = 规则 
RF = 复制筛选存储过程 
S = 系统表 
TF = 表函数 
TR = 触发器 
U = 用户表 
V = 视图 
X = 扩展存储过程

五:Object_ID函数

如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id('name','type')方法。
比如要取出约束名为fk_xxx_xx的ID值

select object_id('fk_xxx_xx','F')

type如下列表:

AF = Aggregate function (CLR)
C = CHECK constraint
D = DEFAULT (constraint or stand-alone)
F = FOREIGN KEY constraint
FN = SQL scalar function
FS = Assembly (CLR) scalar-function
FT = Assembly (CLR) table-valued function
IF = SQL inline table-valued function
IT = Internal table
P = SQL Stored Procedure
PC = Assembly (CLR) stored-procedure
PG = Plan guide
PK = PRIMARY KEY constraint
R = Rule (old-style, stand-alone)
RF = Replication-filter-procedure
S = System base table
SN = Synonym
SQ = Service queue
TA = Assembly (CLR) DML trigger
TF = SQL table-valued-function
TR = SQL DML trigger
U = Table (user-defined)
UQ = UNIQUE constraint
V = View
X = Extended stored procedure

其实上面的就是这样的

#
select ID from sysobjects where name='fk_xxx_xx' and type='F'
推荐 0
本文由 DataFrog 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册