SQL Server的系统表及其应用
蒋俊杰 余 菁 李建平
摘要:本文介绍了Microsoft SQL Server数据库的系统表,并对系统中经常遇到的一个问题给出了通过系统表建立存储过程的解决办法。
关键词:SQL Server 系统表 存储过程
一、SQL Server的系统表
Microsoft 的SQL Server是一个可伸缩的高性能数据库管理系统,专为分布式客户机/服务器环境而设计,SQL Server几乎将所有的配置信息、安全性信息和对象信息都存储在了它自身的系统表中,而系统表存在于每个独立的数据库中,存储一个特定数据库对象信息的系统表通常称为数据库目录,MASTER数据库有其特有的系统表用于保存整个系统和所有数据库的信息,通常称为服务器目录或系统目录。
服务器上所有的数据库包括MODULE,MASTER等都含有18个具有相同名称、结构的系统表,如表SYSOBJECTS用于描述数据库中的对象--表、视图、存储过程等,表SYSUSER用于描述数据库的用户,而MASTER数据库另外还有13个单独的全局系统表,如表SYSLOGINS用于保存每个服务器的登录名、口令和配置信息、表SYSDATABASE保存服务器上所有数据库名、所有者、状态及其他信息。
存储过程是内嵌于数据库中的程序代码,它与表、视图等一样是数据库的一个组成部分,不同于一般的外部程序代码,它是经过预编译处理的代码,因此具有运行速度快、效率高的特点,存储过程也是SQL Server的一个重要功能,许多单纯针对后台数据库的操作一般都交由存储过程来完成以提高系统效率。本文将给出一个存储过程来说明SQL Server系统表的应用。
二、SQL Server系统表的应用
在应用SQL Server的基于客户机/服务器体系结构的信息系统开发中,有时需要将后台SQL Server上的某一数据库的表结构都打印出来,以便于开发人员查阅及最终文档的形成。SQL Server本身提供了一个系统存储过程(SP_COLUMNS),可以完成对单个表结构的查询,只要在SQL Server的ISQL-W工具中键入SP_COLUMNS “表名”,并执行即可得到结果集。但该方法有许多不足之处,其主要缺点是:
1) 只能对单表进行操作,当需要查询一个数据库中所有的表时,需要多次执行SP_COLUMNS ,因此显得非常繁琐。
2) 查询结果集中包含了许多不必要的信息。
下面我们创建一个存储过程来完成对某一个数据库中所有表结构的查询。
在创建一个数据库的同时,系统会自动建立一些系统表,限于篇幅的缘故我们在这里只介绍与应用实例有关的三个系统表(SYSOBJECTS,SYSCOLUMNS,SYSTYPES)及其相关的字段。
表SYSOBJECTS为数据库内创建的每个对象(约束,规则,表,视图,触发器等)创建一条记录。
该表相关字段的含义如下:
SYSOBJECTS.name 对象名,如:表名,视图名。
SYSOBJECTS.id 对象id。
SYSOBJECTS.type 对象类型(p存储过程,v视图,s系统表,u用户表)。
表SYSCOLUMNS 为每个表、视图中的每个列和每个存储过程的每个参数创建一条记录。
该表相关字段的含义如下:(此处的列系指数据库中每个表、视图中的列)
SYSCOLUMNS. id 该列所属的表的id,可与SYSOBJECTS.id相关联
SYSCOLUMNS.colid 列id,表示该列是表或视图的第几列。
SYSCOLUMNS.type 物理存储类型,可与SYSTYPES.type相关联。
SYSCOLUMNS.length 数据的物理长度。
SYSCOLUMNS.name 列名字,即字段名。
SYSCOLUMNS .Pre 列的精度级。
SYSCOLUMNS .Scale 列的标度级。
表SYSTYPES 为每个系统和每个用户提供的数据类型创建一条记录,如果它们存在,给定域和默认值,描述系统提供的数据类型的行不可更改。
该表相关字段的含义如下:
SYSTYPES.name 数据类型的名字。
SYSTYPES.type 物理存储数据类型。
在SQL SERVER的企业管理器(SQL ENTERPRISE MANAGER)中,选定某一数据库,创建存储过程print_dbstructure。
源代码如下:
if exists (select * from sysobjects where id = object_id('dbo. print_dbstructure
') and sysstat & 0xf = 4) 存储过程
drop procedure dbo. print_dbstructure
GO
CREATE PROCEDURE print_dbstructure
AS
SELECT DISTINCT sysobjects.name, syscolumns.colid,
syscolumns.name, systypes.name, syscolumns.prec, syscolumns.scale
FROM syscolumns, sysobjects, systypes
WHERE sysobjects.id = syscolumns.id AND systypes.type = syscolumns.type AND ((sysobjects.type='u'))
GO
首先判断是否存在一个名为print_dbstructure的存储过程,如果存在,就摘除它,否则,定义SQL语句建立新的存储过程。从三个系统表中选出满足条件的记录(即该数据库中保存在系统表中的用户表信息)。
执行时,在ISQL_W工具中,选定print_dbstructure所在的数据库,执行该存储过程,即可得到结果集(即该数据库中用户表的结构信息)。
三、SQL Server系统表的推广应用
以上所介绍存储过程的主要缺陷在于只能对服务器上某一特定的数据库(print_dbstructure所在的数据库)进行查询操作,我们可以通过在SQL Server系统数据库MASTER中建立带有数据库名参数的系统存储过程来解决这一问题,请读者自行完成。当然,SQL Server 系统表的应用远不止于此,读者也可依本文所介绍的方法去挖掘其他几个系统表的应用。
分享到:
相关推荐
在SQL Server 2000中,系统表分为几大类别,包括信息Schema视图、master数据库中的系统表、model和msdb数据库中的系统表。这些表提供了对数据库对象的深入洞察,如: 1. **信息Schema视图**:这些视图提供了一种...
在深入探讨SQL Server中各个系统表的作用之前,我们先来理解一下系统表的基本概念。系统表,也称为系统目录表,是数据库管理系统内部用于存储关于数据库结构和其他对象元数据的特殊表格。它们提供了数据库对象(如表...
在SQL Server数据库环境中,了解如何利用系统表或视图猜解表名对于数据库安全至关重要。攻击者可能会尝试通过这种方式获取敏感信息,而管理员则需要熟悉这些机制以加强防护措施。以下将详细介绍相关知识点: 一、...
随着数据库技术的不断发展,SQL Server 作为一款功能强大的关系型数据库管理系统,在企业级应用中占据着重要的地位。对于运行在Linux环境下的应用程序来说,能够高效地安装与配置SQL Server 成为了一个不可或缺的...
SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),在企业级数据存储、管理和分析中扮演着重要角色。本教程旨在帮助初学者掌握SQL Server的基本概念、操作和开发技巧,使其能够轻松入门。 一、SQL ...
总的来说,深入理解SQL Server的系统表对于数据库管理和应用程序开发至关重要。通过熟练掌握和应用这些系统表,我们可以更有效地管理和优化数据库,解决各种复杂的问题,提高系统的性能和可靠性。在实际工作中,...
总结来说,SQL Server Native Client 10.0是64位环境下的重要组件,为开发者和系统管理员提供了稳定、高效的连接SQL Server的途径,尤其是在使用SQL Server 2008 R2及其新特性的场景下。通过ODBC和OLE DB接口,它...
《SQL Server 2000应用系统开发教程》是一份专为数据库开发人员设计的教育资源,旨在深入浅出地介绍如何使用SQL Server 2000进行高效的应用系统开发。SQL Server 2000是微软公司推出的一款企业级关系型数据库管理...
《SQL Server 2012数据库技术与应用》是一门深度探讨关系型数据库管理系统SQL Server 2012的课程,旨在帮助学习者掌握数据库设计、管理、优化以及实际应用等核心技能。作为微课版,它可能包含了视频教程、实践案例、...
SQL Server是Microsoft公司推出的一种关系型数据库管理系统,广泛应用于企业级数据存储和管理。本文将深入探讨SQL Server的主要知识及其实用应用。 首先,我们来看看SQL Server的基础应用。这一部分涵盖了多个方面...
任何应用程序要访问 SQL Server 数据库中的数据,首先需要使用一个 SQL Server 登录标识向 SQL Server 登录,如果登录成功,则可以进入 SQL Server 系统。但是,应用程序能否对某个数据库中的对象进行操作,则由该...
通过以上介绍,我们可以清晰地了解到SQL Server中临时表的使用方法及其重要特性。临时表作为一种灵活的数据存储手段,在实际开发过程中具有广泛的应用价值。正确理解和使用临时表,可以帮助我们更高效地完成数据处理...
《SQL Server 2000数据库及应用》是一本深入探讨SQL Server 2000这一经典数据库管理系统及其在实际应用中的技术书籍。SQL Server 2000是由微软公司开发的关系型数据库管理系统,它在2000年发布,为当时的企业级数据...
SQL Server是微软公司提供的一个强大、可靠的数据库管理系统,特别适合大型企业级应用。在论坛系统中,SQL Server负责存储所有论坛相关数据,如用户信息、帖子内容、评论、分类等。其强大的事务处理能力保证了数据的...
在IT领域,特别是数据库管理与维护中,了解SQL Server的具体版本和补丁号对于系统管理员而言至关重要。这不仅有助于确保数据库系统的稳定运行,还能帮助快速识别并解决潜在的安全漏洞和性能问题。本文将深入探讨如何...
SQL Server 2005是微软公司开发的一款强大的关系型数据库管理系统(RDBMS),广泛应用于各种规模的企业和组织。 一、数据库基础理论 1. 数据库概念:理解数据库是什么,以及其在信息系统中的作用。数据库是一个有...
SQL Server 2005是微软公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和应用程序开发中扮演着重要角色。本资源聚焦于SQL Server 2005的数据库应用与开发,提供了习题解答和上机指导,帮助学习者深化...
SQL Server 2016是Microsoft推出的一款企业级关系型数据库管理系统,具有高效的数据存储、分析和管理能力,广泛应用于各类企业的信息系统中。本教程旨在深入浅出地介绍SQL Server 2016的核心功能与操作技巧,帮助...
- `sqlserver卸载清除工具`:可能是通用的SQL Server卸载工具,不区分具体版本或操作系统位数。 - `MSSQL卸载工具_Windows_x86`:适用于32位操作系统的卸载工具。 在使用这些工具时,用户需要注意以下几点: 1. **...