SQL Server 2000 ——系统表和系统视图
一、系统表
数据字典的详细信息请查SQL SERVER BOL,这里仅列出一部分。
1.1、sysservers
1、查看所有本地服务器及链接服务器
select * from master..sysservers
1.2、sysdatabases
1:查询非sa创建的所有数据库
select * from master..sysdatabases
where sid not in(select sid from master..syslogins where name='sa')
--或者
select dbid, name AS DB_NAME from master..sysdatabases
where sid <> 0x01
1.3、sysobjects
1:获取当前数据库中的所有用户表
select name from sysobjects where xtype='U' and status>0
为什么要加status>0,因为表dtproperties,虽然该表的xtype为U,实质上它是系统表。
dtproperties这个表里保存的是关系图,如果没建关系图,就是空的。
注意:这个表只是数据库对象的属性,如果想要看表、索引详细的属性,查看sysindexes。
2:查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P' and status>0
为什么要加status>0,是为了去掉当前数据库中的系统存储过程。
注:该系统表中type与xtype的区别是什么?
Type是在SQL SERVER 6.0就有的,xType在SQL SERVER 7.0才出现,Type的保留只是为了向后兼容。每种数据库对象的类型详见SQL SERVER BOL。
1.4、syscolumns
1:获取表或视图的所有字段,存储过程或函数的所有参数
select name from syscolumns where id=object_id('表名')
1.5、sysproperties
1:怎么把SQL SERVER中表设计和表注释读出来
--表的注释全在sysproperties里
select b.name,value from sysproperties as a,sysobjects as b
where a.id=b.id and b.name='表名'
1.6、sysindexes
1:根据聚集索引,快速查询表的行数
SELECT rowcnt,indid FROM sysindexes WHERE id=OBJECT_ID('tableName')and indid < 2
注意:使用这种方法可能不精确,因为系统的统计信息在某些时候不一定是准确的。关于统计的维护(dbcc updateusage()),详见《SQL SERVER 性能优化——查询优化》series。
2:查看索引表信息
select
table_Name=sysobjects.Name,
index_Name=sysindexes.Name,
Type=sysobjects.type,
分配索引页=sysindexes.reserved,
使用索引页=sysindexes.used,
叶子层页=sysindexes.Dpages,
非叶子层页=sysindexes.used-sysindexes.Dpages,
rows=sysindexes.rowcnt
from sysindexes left outer join sysobjects on sysindexes.id=sysobjects.id
where sysindexes.indid>0 and sysindexes.indid<255 and sysindexes.status & 64=0
注意:若发现非叶子层的页数为负数,最好是运行DBCC UPDATEUSAGE ('dbname','tbname','ixname')来更新一下sysindexes的信息
1.7、syslogins
SQL SERVER 服务器的登录信息,比如:sa,有关登录、用户、角色的信息详见《SQL SERVER 2000 管理——安全——用户权限》。
select * from syslogins
select * from sysxlogins
sysxlogins是syslogins的精简版,BOL中没有说明,不推荐使用。
1.8、sysprocesses
1:查看用户进程信息
select spid,uid,syslogins.name,login_time,net_address from sysprocesses,syslogins where sysprocesses.sid=syslogins.sid
2:查看数据库启动时间
select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1
1.9、sysdepends
1:查看与某一个表相关的视图、存储过程、函数
select * from sysdepends where depid=object_id('表名')
--或者
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
注意:这种查法,只适用在没有with Encryption选项,即没有加密该对象时。
--或者
sp_depends
注意:这个表的统计信息并不准确,没有什么好的办法,查询结果只可用于参考。
1.10、sysmessages
SQL SERVER返回的内部错误都有在这里,可自行定义进行错误的添加,但一般我习惯于新建一个错误的表来定义自己程序中的错误。
select * From master..sysmessages where error=5037
1.11、sysfiles、sysfilegroups
1、查询当前数据库的文件使用情况
select name,filename,size/128 as 'used(M)',case maxsize/128 when 0 then 'no limit' else cast(maxsize/128 as varchar(10))end as 'total(M)' from sysfiles
2、查询当前数据库的表所在文件组
select distinct a.id,a.name,b.groupid,c.groupname from sysobjects a inner join sysindexes b on a.id=b.id
inner join sysfilegroups c on b.groupid=c.groupid
where a.xType='U' and a.status>0 order by a.name
sysfiles1是sysfiles的精简版,BOL中没有说明,不推荐使用。
二、系统视图
在master数据库中有INFORMATION_SCHEMA和system_function_schema两个用户,它们的登录是<无>,这是系统内置的两个用户。
INFORMATION_SCHEMA拥有自已的视图,在SQL Server 2000中没有被广泛使用,因为很多时候都可以从系统表中得到我们想要的结果,同样到了SQL Server 2005中,被广泛使用的仍然是sys所拥有的视图,SQL Server 2005的相关内容详见后续《SQL Server 2005》series文章。举例如下:
1、查询某个表的哪些字段不允许为空
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
where IS_NULLABLE='NO' and TABLE_NAME='stb_User'
2、查询某个表的键约束
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE
where TABLE_NAME='stb_User'
注:键约束,是指除了CHECK、NOT NULL外的约束,即PK,FK,UNIQUE,DEFAULT不是约束。
SQL Server 2000 ——系统表和系统视图的更多相关文章
- 使用SQL Server 2000索引视图提高性能
什么是索引视图? 许多年来,Microsoft? SQL Server? 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某 ...
- SQL Server 2000 系统存储过程
SQL Server 2000 系统存储过程 在 Microsoft? SQL Server? 中,许多管理和信息活动可以通过系统存储过程执行.系统存储过程按这些分类分组. 分类 描述 Active ...
- 如何在64位系统上安装SQL Server 2000
如何在64位系统上安装SQL Server 2000? 现在用SQL Server 2000数据库的人少了吧?大都是SQL Server 2005/2008了.不过还是有需求的,今天一朋友就让我在他的 ...
- 把sql server 2000的用户表的所有者改成dbo
怎么样把sql server 2000的用户表的所有者,改成dbo,而不是用户名. 推荐使用下面介绍的第二种方法,执行以下查询便可以了.sp_configure 'allow updates','1' ...
- ORACLE主要的系统表和系统视图
ORACLE主要的系统表和系统视图 1.系统表 ORACLE数据库的系统参数都存储在数据库中,可以通过SQLPLUS,以用户SYS进行查询.几个重要的表或者视图如下: v$controlfile:控制 ...
- SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数
---SQL SERVER 2000 遍历父子关系數據表(二叉树)获得所有子节点 所有父节点及节点层数函数---Geovin Du 涂聚文--建立測試環境Create Table GeovinDu([ ...
- Sql Server 2000/2008 用Sql导出数据表结构(包括注释)到Excel
--Sql Server 2000 declare @id int, ), ) declare cur_1 cursor for select id,name from sysobjects wher ...
- VFP获取 SQL Server 的数据表、触发器、存储过程、视图等脚本
本文代码转载自红雨先生 *-----------------------------------------------* SqlServer 相关函数*----------------------- ...
- SQL Server 临时表 Vs 表变量
开始 说临时表和表变量,这是一个古老的话题,我们在网上也找到很多的资料阐述两者的特征,优点与缺点.这里我们在SQL Server 2005\SQL Server 2008版本上通过举例子,说明临时表和 ...
随机推荐
- Gradle用户指南(2)-基本命令
1.定义任务 使用task 关键字来定义gradle 任务 例:创建一个 build.gradle 命名的文件: build.gradle task hello { doLast { println ...
- 混合应用中的javascript实践
混合应用中的javascript实践 混合应用(hybird app) 在几年前便进入大众视野,近来更是越发风生水起,深受人民群众的喜爱. 目录 概念 什么是混合应用 混合方式 交互 方法注入 参数传 ...
- WiFi入口流量O2O微应用平台
WiFi入口流量O2O微应用平台 随着智能手机一年比一年销量大好,传统的互联网的流量争夺战场已经转向了移动互联网,各大巨头纷纷出招,智能wifi路由器就是其中最重要的一块战略高地.所谓的智能路由器,解 ...
- Lucene4.3开发之分词器总结
Lucene4.3开发之分词器总结 http://java.chinaitlab.com/tools/940011.html
- django-cms 代码研究(一)djangocms是什么
首先用djangocms生成了一个站点(具体参考这里:http://www.cnblogs.com/Tommy-Yu/p/3878488.html),其文件结构如下: 本来以为会很有逼格,结果一看傻眼 ...
- CC MayClg 15 T3
www.codechef.com/MAY15/problems/CHAPD 一道比较神奇的题目... 看到题目后自己yy出了个傻逼算法...然后对拍都是对的...提交都是错的...然后一看" ...
- Thinkphp中eq,neq,gt,lt等表达式缩写
eq 等于 equalneq 不等于gt 大于 greater thanegt 大于等于lt 小于 less thanelt 小于等于like LIKEbetween BETWEENno ...
- JAVA程序1,1,2,3,5,8,13,21....第30个是什么...?
解题思路:从第3个数字开始,后一个数字是前2个数字的和public class text{ public static void main(String[] args) { int num1=1,nu ...
- SQL union和union all的区别
Union因为要进行重复值扫描,所以效率低.如果合并没有刻意要删除重复行,那么就使用Union All 两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致): 如果我们需要将两个 ...
- Swap Nodes & Reverse Nodes in k-Group
Swap Nodes | Given a linked list, swap every two adjacent nodes and return its head. Example Given 1 ...