扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:heha 来源:赛迪网技术社区 2007年9月7日
二、深入研究,让SQL自己招数据库结构
很多时候,我们只能猜到大家比较熟用的表名,如果是非原程序公开下载的,我们很猜到他的真实数据库结构,有时候猜半天都猜不到,令人很郁闷,那么该如何拿到他的表结构呢?我们知道SQL SERVER的每一个数据库都会有用户表和系统表,根据SQL SERVER的联机帮助描述是系统表sysobjects:在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行,那么也就是说当前数据库的表名都会在该表内有存在,(对象名 admin 无效。大家可以看到上面出现的报错把表名描述成对象)。
我们要用的是其中的3个,描述如下(详细的见SQL SERVER的联机帮助):
name 数据表的名字;
xtype 数据表的类型 u为用户表;
id 数据表的对象标志;
status 保留字段,用户表一般都是大于0的。
在查询分析器执行以下SQL语句(以我本地的数据库为例子):
select top 1 name from sysobjects where xtype=u and status>0
我们马上就可以得到该数据库下用户表的第一个表名gallery:
select top 1 id from sysobjects where xtype=u and name=gallery
我们马上就可以得到该数据库下用户表的第一个表名gallery的对象标志2099048:
select top 1 name from sysobjects where xtype=u and id>2099048
再得到第2个表名gb_data,这里用到的是id>2099048,因为对象标志id是根据由小到大排列的。
以此类推,我们可以得到所有的用户表的名字了。接下来,我们要根据得到的表名取他的字段名,这里我们用到的是系统自带的2个函数col_name()和object_id(),在查询分析器执行以下SQL语句(以我本地的数据库为例子):
select top 1 col_name(object_id(gallery),1) from gallery
得到gallery表的第一个字段名为id。
注:
col_name()的语法
COL_NAME ( table_id , column_id )
参数
table_id:包含数据库列的表的标识号。table_id 属于 int 类型。
column_id:列的标识号。column_id 参数属于 int 类型。
其中我们用object_id()函数来得到该表的标识号,1、2、3。。表示该表的第1个、第2个、第3个。。字段的标识号,以此类推得到该表所有的字段名称。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者