这里主要是整理些常用系统表的知识点,有时候面试数据分析的时候会问到的。先给大家出一道面试题目:
已知道一个用户表的名字是 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 constraintD = DEFAULT (constraint or stand-alone)F = FOREIGN KEY constraintFN = SQL scalar functionFS = Assembly (CLR) scalar-functionFT = Assembly (CLR) table-valued functionIF = SQL inline table-valued functionIT = Internal tableP = SQL Stored ProcedurePC = Assembly (CLR) stored-procedurePG = Plan guidePK = PRIMARY KEY constraintR = Rule (old-style, stand-alone)RF = Replication-filter-procedureS = System base tableSN = SynonymSQ = Service queueTA = Assembly (CLR) DML triggerTF = SQL table-valued-functionTR = SQL DML triggerU = Table (user-defined)UQ = UNIQUE constraintV = ViewX = Extended stored procedure
其实上面的就是这样的
#select ID from sysobjects where name='fk_xxx_xx' and type='F'
作者:凡人求索
链接:https://www.jianshu.com/p/fbcc1a78aa11