SQL Server读取库里所有表名

SQL/NoSQL 2013-03-01 Sqlserver,sysobjects

在SQL Server里要获取库中所有表名,并不能像MySQL那样直接show table就搞定

mysql> use demo
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_demo |
+----------------+
| a              |
| b              |
| c              |
+----------------+
3 rows in set (0.00 sec)

在SQL Server中要读取库中所有表名需要先了解sysobjects系统表,什么是sysobjects系统表呢?根据谷歌搜索有这么一段话

SQL Server sysobjects 表结构
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行

 

列名 数据类型 描述
name sysname 对象名。
Id int 对象标识号。
xtype char(2) 对象类型。可以是下列对象类型中的一种:

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

uid smallint 所有者对象的用户 ID。
info smallint 保留。仅限内部使用。
status int 保留。仅限内部使用。
base_schema_
ver
int 保留。仅限内部使用。
replinfo int 保留。供复制使用。
parent_obj int 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。
crdate datetime 对象的创建日期。
ftcatid smallint 为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。
schema_ver int 版本号,该版本号在每次表的架构更改时都增加。
stats_schema_
ver
int 保留。仅限内部使用。
type char(2) 对象类型。可以是下列值之一:

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

userstat smallint 保留。
sysstat smallint 内部状态信息。
indexdel smallint 保留。
refdate datetime 留作以后使用。
version int 留作以后使用。
deltrig int 保留。
instrig int 保留。
updtrig int 保留。
seltrig int 保留。
category int 用于发布、约束和标识。
cache smallint 保留。
 

根据描述,既然是一张表,我们就可以select下它有那些内容

1> select top 1 * from sysobjects 
2> go
name    id      xtype   uid     info    status  base_schema_ver replinfo        parent_obj      crdate  ftcatid schema_ver      stats_schema_ver        type    userstat        sysstat indexdel        refdate version deltrig instrig updtrig     seltrig category        cache
sysobjects      1       S       1       25      -536870909      96      0       0       2000-08-06 01:29:12     0       96      0       S       1       113     0       2000-08-06 01:29:12     0       0       0       0       0       2  0
(1 row affected)

查询结果有好多信息,跟前面表格列出的信息一一对应,这里我们只想读取所有表名,那么我们可以加个where条件

1> select name from sysobjects where xtype='u'       
2> go
name
s_honor
s_probability
s_room_allow
s_room_day_jifen
s_room_jifen
s_room_jifen_log
s_sign_count
s_sign_day_room
s_sign_log
s_sign_room_daycount
s_sign_tmp
s_udian_log
s_udian_total
s_user_day_jifen
s_user_honor
s_user_jifen
s_user_jifen_log
(17 rows affected)

这样就可以把库中所有表的名称都列出来了

文字链接:《SQL Server读取库里所有表名

文章地址:http://www.qttc.net/201303284.html

除非标注,琼台博客所有博文均为原创,转载请加文字链接注明来源

乳名?小名?昵称?网名?均可

email,放心,我不会给你乱投广告的

想获得回访就把你的站点URL写上(没有留空)

[NOTICE]木要投放广告
[NOTICE]木要骂人,说不该说的话
[NOTICE]自由言论,但要遵纪守法

Comments 1

  • 不是很喜欢微软的东西,微软那一套都不愿意去碰。还是喜欢 Mysql。下个学期就要开数据库课了,所以来看一下预习一下。
    2013-03-03 15:34:01 [ 跟帖 ]
    1 #