数据库怎么创建表?用SQL语句创建数据库和表( 二 )


服务器上所有的数据库包括,等都含有18个具有相同名称、结构的系统表,如表用于描述数据库中的对象棗表、视图、存储过程等,表用于描述数据库的用户,而数据库另外还有13个单独的全局系统表,如表用于保存每个服务器的登录名、口令和配置信息、表保存服务器上所有数据库名、所有者、状态及其他信息 。
存储过程是内嵌于数据库中的程序代码,它与表、视图等一样是数据库的一个组成部分,不同于一般的外部程序代码,它是经过预编译处理的代码,因此具有运行速度快、效率高的特点,存储过程也是SQL 的一个重要功能,许多单纯针对后台数据库的操作一般都交由存储过程来完成以提高系统效率 。本文将给出一个存储过程来说明SQL 系统表的应用 。
2. SQL 系统表的应用
在应用SQL 的基于客户机/服务器体系结构的信息系统开发中,有时需要将后台SQL 上的某一数据库的表结构都打印出来,以便于开发人员查阅及最终文档的形成 。SQL 本身提供了一个系统存储过程(),可以完成对单个表结构的查询,只要在SLQ 的ISQL-W工具中键入“表名”,并执行即可得到结果集 。但该方法有许多不足之处,其主要缺点是:
1)只能对数据库中单个数据表进行操作,当需要查询一个数据库中所有的表时,需要多次执行系统存储过程,因此显得非常繁琐 。
2)查询结果集中包含了许多不必要的信息,缺乏使用的灵活性 。
下面我们创建一个存储过程来完成对某一个数据库中所有表结构的查询 。
在创建一个数据库的同时,系统会自动建立一些系统表,限于篇幅的缘故我们在这里只介绍与应用实例有关的三个系统表(,,)及其相关的字段 。 表为数据库内创建的每个对象(约束,规则,表,视图,触发器等)创建一条记录 。
该表相关字段的含义如下:
.name 对象名,如:表名,视图名 。
.id 对象id 。
.type 对象类型(p存储过程,v视图,s系统表,u用户表) 。
表为每个表、视图中的每个列和每个存储过程的每个参数创建一条记录 。 该表相关字段的含义如下:(此处的列系指数据库中每个表、视图中的列)
.id 该列所属的表的id,可与.id相关联
.colid 列id,表示该列是表或视图的第几列
.type 物理存储类型,可与.type相关联.
. 数据的物理长度 。
.name 列名字,即字段名 。
.Pre 列的精度级 。
.Scale 列的标度级 。
表为每个系统和每个用户提供的数据类型创建一条记录,如果它们存在,给定域和默认值,描述系统提供的数据类型的行不可更改 。
该表相关字段的含义如下:
.name 数据类型的名字 。
.type 物理存储数据类型 。
在SQL 的企业管理器(SQL)中,选定某一数据库,创建存储过程 。
源代码如下:
if(* fromwhere id=( 'dbo. ')and& 0xf=4)存储过程
dropdbo. 
GO

AS
.name, .colid,
.name, .name, .prec, .scale
FROM , , 
WHERE .id=.id AND .type=.type AND ((. type= 'u '))
GO
首先判断是否存在一个名为的存储过程,如果存在,就摘除它,否则,定义SQL语句建立新的存储过程 。从三个系统表中选出满足条件的记录(即该数据库中保存在系统表中的用户表信息) 。
执行时,在工具中,选定所在的数据库,执行该存储过程,即可得到结果集(即该数据库中用户表的结构信息) 。
3. SQL 系统表的应用推广
以上所介绍存储过程的主要缺陷在于只能对服务器上某一特定的数据库(所在的数据库)进行查询操作,我们可以通过在SQL 系统数据库中建立带有数据库名参数的系统存储过程来解决这一问题,请读者自行完成 。当然,SQL系统表的应用远不止于止,读者也可依本文所介绍的方法去挖掘其他几个系统表的应用 。