`
izuoyan
  • 浏览: 9220528 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《高效能的数据库》第五讲-几个常用的系统表

阅读更多
出处:http://www.jasonlee.cn/article.asp?id=310

1、sysobjects


系统对象表。保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等

sysobjects重要字段解释:

sysObjects(
Namesysname,--object名称
idint,--objectid
xtypechar(2),--object类型
typechar(2),--Object类型(与xtype似乎一模一样?有点郁闷…)
uidsmallint,--object所有者的ID
...--其他的字段不常用到。
)

其中,需要解释的是xtype和type是一模一样的(不知道ms搞什么名堂),他的数据为:

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


我们会在什么时候用到sysobjects呢?最常见的:

a、我打算创建一个表table1在数据库db1中。如果table1不存在,则直接建立,如果table1已经存在,则删除重新建立。

那么,在t-sql批处理命令中这么写:

usedb1
go

ifexists(Select*FromsysObjectsWhere[Name]='table1andxtype='U')
DropTabletable1
go

Createtable1(
fd1int,
fd2int,
...
)
go

----------------------------------------------------------------------
以上代码没有测试,顺手写写的。希望不会出错:)
--3腿椅子

精彩世界,尽在开发者俱乐部(www.dev-club.com)!!
-----------------------------------------------------------------------

b、我打算大概统计一下,某个数据库系统中有多少个tb,多少个SP,多少个FN,以及多少个vw,以粗略估算一下需要多少工作量。
以系统自带数据库northwind为例

usenorthwind
go

SelectIsNull(Cast(xTypeasvarchar(4)),'总计')as'分类',
Count(*)as'计数'
fromsysobjects
WhereXType='U'orXtype='P'orXtype='FN'orXtype='V'
GroupbyxType
withcube

结果为:


分类计数
---------------
P38
U14
V18
总计70

(所影响的行数为5行)


----------------------------------------------------------------------
可知,northwind数据库有0个fn,38个sp,14个TB,还有18个VW,总计70个重要对象。

以上代码已经测试,不是顺手写写的。肯定不会出错:)

--3腿椅子

精彩世界,尽在开发者俱乐部(www.dev-club.com)!!
-----------------------------------------------------------------------


2、sysColumns

数据库字段表。当前数据库的所有字段都保留在里面。

重要字段解释:

sysColumns(
namesysname,--字段名称
idint,--该字段所属的表的ID
xtypetinyInt,--该字段类型,关联sysTypes表
lengthsmallint,--该字段物理存储长度
...
)

最常的应用,莫过于想看看某一个表,有哪些字段,以及字段的长度了。

比如,我想看看northwind中employees表的字段以及长度情况:

usenorthwind
go

Selectobject_name(c.id)as'tablename',
c.[name]as'column',
t.[name]as'type',
c.[length]
FromsysColumnscinnerjoinsystypestonc.xtype=t.xtypeandt.[name]<>'sysname'
Wherec.id=object_id('employees')
orderbyc.colOrder

那么结果为:

tablenamecolumntypelength
---------------------------------------------------------------
EmployeesEmployeeIDint4
EmployeesLastNamenvarchar40
EmployeesFirstNamenvarchar20
EmployeesTitlenvarchar60
EmployeesTitleOfCourtesynvarchar50
EmployeesBirthDatedatetime8
EmployeesHireDatedatetime8
EmployeesAddressnvarchar120
EmployeesCitynvarchar30
EmployeesRegionnvarchar30
EmployeesPostalCodenvarchar20
EmployeesCountrynvarchar30
EmployeesHomePhonenvarchar48
EmployeesExtensionnvarchar8
EmployeesPhotoimage16
EmployeesNotesntext16
EmployeesReportsToint4
EmployeesPhotoPathnvarchar510


----------------------------------------------------------------------
呵呵,其实认真看看,可以看见length的长度和表创建的长度是不一致的(翻倍了)……注意看我上面的注明,是物理存储长度。
实际上,字符串类型的,需要除以2的。

其中,还引用到了另外一个系统表sysTypes,简单说明一下:这个系统表是用来存放数据类型的。我这里为了方便,把类型翻译过来

了。不然type就是一些ID号了。看得大家不爽。

以上代码已经测试,不是顺手写写的。肯定不会出错:)

--3腿椅子

精彩世界,尽在开发者俱乐部(www.dev-club.com)!!
-----------------------------------------------------------------------

3、sysUsers

当前数据库的系统组,以及用户。

sysUsers(
uidsmallint,--用户id
namesmallint,--名称
uidvarbinary(85),--属于一个登陆
....
)

这个系统表没啥好说的,我讲大家还不如自己去看onlinehelp。

简单举个例子把:
查看当前数据库有那些用户:

usenorthwind
go

select*Fromsysuserswherestatus<>0

结果为:

uididnamesid其他字段(略)
-------------------------------------------------------------------------------
22guest0x00
12dbo0x01
52chair30x8750E1247F2BDF4280C44D23FDADEAF6


4、sysdenpends

当前数据库的依赖关系。怎么说呢?一下子不知道怎么表达了。

就这样举个例子吧。

比如,我修改别人的垃圾代码,看得严重不爽,然后需要修改他的表,那么,我担心会影响到其他的sp,vw,或者fn。
这个时候,我需要先查询一下,看看有那些程序调用到了这个表。

下面的例子,显示northwind数据库中,谁引用了products这个表

于是:

usenorthwind
go

Selectdistinctobject_name(d.id)as'program',
o.xtype
fromsysdependsdinnerjoinsysobjectsoond.id=o.id
whereobject_name(depid)='products'

于是得到结果

programxtype
------------------------------------
AlphabeticallistofproductsV
CK_Products_UnitPriceC
CK_ReorderLevelC
CK_UnitsInStockC
CK_UnitsOnOrderC
CurrentProductListV
CustOrderHistP
CustOrdersDetailP
InvoicesV
orderDetailsExtendedV
ProductSalesfor1997V
ProductsAboveAveragePriceV
ProductsbyCategoryV
SalesbyCategoryV
SalesByCategoryP
TenMostExpensiveProductsP

----------------------------------------------------------------------
看看,一看就明白了吧?至于xtype的类型,在sysObjects中已经有介绍了。

以上代码已经测试,不是顺手写写的。肯定不会出错:)

--3腿椅子
-----------------------------------------------------------------------


好了。一般程序员用到的系统表,基本也就这几个。

其他的特殊的系统表(主要都在master或者tempdb)里面了,大家自己摸索摸索把。或者以后再说了。:)
分享到:
评论

相关推荐

    Oracle数据库管理员技术指南

    第5章 使用热备用数据库 5.1 什么是失败切换 5.2 热备用数据库 5.2.1 热备用数据库的优点 5.2.2 热备用数据库的缺点 5.2.3 建立和配置热备用数据库 5.2.4 创建备用数据库作为主数据库的 一个子集 5.2.5 选择...

    南方企业管理系统数据库V10完整版

    南方企业管理系统数据库V10完整版是一款专为企业打造的高效能、全面的网站管理系统,旨在帮助企业轻松管理和维护其在线业务。这款系统经过了严格的测试,确保在运行过程中完全无错,用户可以放心使用。 该系统的...

    关于数据库设计的经验谈

    #### 第5部分-各种小技巧 这部分包含了一些实用的小技巧,可以帮助开发者更高效地完成数据库设计任务。这些技巧涵盖了从性能优化到错误排查等多个方面。 总之,成功的数据库设计不仅仅是关于理论知识的应用,更多...

    多线程数据库转换

    在IT行业中,多线程数据库转换是一个复杂而关键的任务,特别是在大数据处理和高效能系统设计中。本程序的目的是利用多线程技术提高数据转换的效率,将源数据库中的信息高效地迁移到其他数据库系统中。这个过程涉及到...

    管理系统系列--基于SpringBoot的物业管理系统.zip

    综合上述信息,我们可以了解到这个物业管理系统是利用SpringBoot的高效能和便捷性构建的,它提供了全面的物业管理服务,涵盖了多项业务需求,并且具备良好的用户体验。开发者可以通过源代码和配置文件进行二次开发或...

    嵌入式数据库移植与应用.doc

    嵌入式数据库移植与应用是IT领域中一个重要的实践课题,尤其在当今物联网和智能设备广泛应用的时代,嵌入式数据库的高效能和低资源占用变得至关重要。本文将深入探讨SQLite,一个广泛使用的嵌入式数据库管理系统,...

    决策支持系统-华南理工大学博士论文

    决策支持系统通常包含以下几个关键组件:数据仓库、联机分析处理(OLAP)、数据挖掘以及用户界面等。数据仓库是决策支持系统的基础,它用于集中存储来自不同源的大量历史数据。而实时数据处理中心则是为了增强对快速...

    国家公务员考试测试系统

    在描述中提到的几个关键点包括“控件”、“数据库应用”和“源码资源”,这些是构建此类系统的基石。首先,“控件”可能指的是图形用户界面(GUI)中的组件,如按钮、文本框、复选框等,它们使得用户能够与软件进行...

    视频智能分析系统集成技术方案.docx

    - **设计思路**:综合报警系统需具备高度灵敏度和准确性,能够在第一时间检测到异常情况并触发报警。 - **拓扑结构**:通常采用总线型或混合型拓扑结构,以增强系统的可靠性和稳定性。 - **点位部署**:在易发事故...

    行政培训考核系统项目概要设计说明书.docx

    - **未提供具体的结构图**, 但可以推测该系统的结构应包含以下几个层次: - 用户操作层:负责用户的交互界面展示和操作接收。 - 业务层:处理核心业务逻辑,如用户管理、资源管理等。 - 信息层:数据处理层,负责...

    基于VB6.0的自动监控系统

    【基于VB6.0的自动监控系统】是一个利用Visual Basic 6.0(VB6.0)编程语言开发的高效能、功能丰富的监控解决方案。VB6.0是Microsoft公司推出的一种面向对象的可视化编程工具,它以其直观的界面和强大的编程能力在90...

    ThinkPHP公司员工考勤工资考核系统毕业源码案例设计.zip

    在实际应用中,可进一步优化系统性能,如采用缓存技术提高数据读取速度,通过接口集成第三方考勤设备,或者利用大数据分析员工行为模式,以提升管理效能。 总结,基于ThinkPHP的公司员工考勤工资考核系统毕业设计是...

    --智慧城市应急救援信息化指挥平台建设综合解决方案.docx

    本方案旨在通过构建智慧城市应急救援信息化指挥平台,实现以下几个目标: - **快速响应**:在第一时间掌握灾情信息,及时启动应急预案。 - **统一调度**:实现跨部门、跨区域的信息共享和资源调配。 - **科学决策**...

    劳务派遣管理系统-工作说明书.doc

    系统主要包含以下几个关键模块: 1) 人员信息管理:记录派遣员工的基本信息、技能资质、工作经历等。 2) 合同管理:管理派遣合同的签订、变更、到期提醒等环节。 3) 考勤与绩效:跟踪员工的出勤情况和绩效表现,为...

    进销管理系统、超市管理系统

    在本项目中,这些系统是通过使用Delphi编程语言开发的,这是一款强大的面向对象的开发工具,以其高效能和易用性闻名。结合SQL Server 2000作为数据库管理系统,确保了数据的安全性和处理大量事务的能力。 Delphi是...

    企业日常事务管理系统

    系统的核心功能可能包括以下几个方面: 1. **用户管理**:系统应具备用户注册、登录、权限分配等功能,以确保只有授权的员工能够访问和操作相关数据。权限管理是关键,它可以根据职务、部门等不同角色设定不同的...

    九江学院学生宿舍管理系统

    【九江学院学生宿舍管理系统】是一个基于信息技术的高效能、安全的专用系统,旨在优化信息工程学院的学生宿舍管理工作,提升工作效率,节约人力、物力和财力。该系统利用了多种技术,如Visual Basic 6.0作为开发语言...

    ASP.NET OA 网络办公自动化系统 源码

    ASP.NET OA 网络办公自动化系统是一种基于微软的ASP.NET技术开发的高效能、可扩展的业务流程管理系统。该系统旨在帮助企业或组织实现日常办公流程的自动化,提高工作效率,减少人为错误,优化资源分配。ASP.NET是...

    Visual C++图书管理系统

    《Visual C++图书管理系统》是一款基于C++编程语言开发的高效能、易操作的图书管理软件。该系统充分利用了Visual C++的MFC(Microsoft Foundation Classes)库,为用户提供了一个直观且功能丰富的用户界面,实现了对...

Global site tag (gtag.js) - Google Analytics