这里主要是整理些常用系统表的知识点,有时候面试数据分析的时候会问到的。先给大家出一道面试题目:
已知道一个用户表的名字是 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'
网友评论