一、系统表

数据字典的详细信息请查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系统表和视图相关的语句的更多相关文章

  1. Sql server 系统表

    sql server系统表详细说明 SQL Server 用户库中系统表说明 名称 说明 备注 syscolumns 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.   sys ...

  2. SQL Server 系统表简介

    SQL Server 系统表简介 系统目录是由描述SQL Server 系统的数据库.基表.视图和索引等对象的结构的系统表组成.SQL Server 经常访问系统目录,检索系统正常运行所需的必要信息. ...

  3. SQL Server系统表sysobjects介绍与使用(转)

    SQL Server系统表sysobjects介绍与使用 关于SQL Server数据库的一切信息都保存在它的系统表格里.我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格.但是,你可 ...

  4. SQL Server系统表sysobjects介绍

    SQL Server系统表sysobjects介绍 sysobjects 表结构: 列名 数据类型 描述 name sysname 对象名,常用列 id int 对象标识号 xtype char(2) ...

  5. SQL Server系统表介绍与使用

    关于SQL Server数据库的一切信息都保存在它的系统表格里.我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格.但是,你可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器.你可 ...

  6. sql server 系统表系统视图 及作用说明

    sql server 系统视图,可分为: 目录视图   兼容性视图    动态管理视图和函数    信息架构视图    复制视图 系统表: sysaltfiles主数据库 保存数据库的文件 sysch ...

  7. SQLSERVER系统视图 sql server系统表详细说明

    参考 https://www.cnblogs.com/luluping/archive/2012/11/05/2754639.html https://www.cnblogs.com/litubin/ ...

  8. SQL Server系统表sysobjects介绍与使用(转))

    这就让sysobjects表格有了用武之地.虽然我不建议你更新这个表格,但是你当然有权对其进行审查. sysobjects 表  在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中 ...

  9. sql server系统表详细说明

    sysaltfiles  主数据库 保存数据库的文件 syscharsets  主数据库字符集与排序顺序 sysconfigures 主数据库 配置选项 syscurconfigs 主数据库当前配置选 ...

随机推荐

  1. Liferay7 BPM门户开发之22: Liferay7模型监听器(Model Listeners)

    Model Listeners实现ModelListener接口,用于持久化时的AOP处理 一些使用场景: Audit Listener: 在一个独立而分离的数据库,做信息更新的审计: Cache C ...

  2. hdu 6127---Hard challenge(思维)

    题目链接 Problem Description There are n points on the plane, and the ith points has a value vali, and i ...

  3. Java SE 9(JDK9)环境安装及交互式编程环境Jshell使用示例

    目的 安装JDK 9, 练习Jshell工具的使用, 体验Java的交互式编程环境. 什么是Jshell 其实就是一个命令行工具,安装完JDK9后,可以在bin目录下找到该工具,与Python的解释器 ...

  4. Java并发编程笔记之Timer源码分析

    timer在JDK里面,是很早的一个API了.具有延时的,并具有周期性的任务,在newScheduledThreadPool出来之前我们一般会用Timer和TimerTask来做,但是Timer存在一 ...

  5. java反转链表

    /** * 遍历,将当前节点的下一个节点缓存后更改当前节点指针 */ public static Node reverse2(Node head) { if (head == null) return ...

  6. python3爬虫——下载unsplash美图到本地

    最近发现一个网站www.unsplash.com ( 没有广告费哈,纯粹觉得不错 ),网页做得很美观,上面也都是一些免费的摄影照片,觉得很好看,就决定利用蹩脚的技能写个爬虫下载图片. 先随意感受一下这 ...

  7. angular学习笔记-关于ng-class的那些事儿

    在angular中为我们提供了3种方案处理class: 第一种:通过数据的双向绑定(一般是不推荐的) 注意:当它的值为一个字符串时,它就会把用空格分开的字符串加到class中(不推荐,与常用class ...

  8. Linux下lz4解压缩命令小结

    lz4是一个让"人见人爱.花见花开"的压缩算法,能够在多核上很好的扩展.lz4在压缩率上略微逊色, 但是在解压速度上有着惊人的优势 (大概是gzip的3倍(多次测试对比)).因为压 ...

  9. Java 容器源码分析之ConcurrentHashMap

    深入浅出ConcurrentHashMap(1.8) 前言 HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CP ...

  10. TCP编程实践小结1

    说起TCP/IP协议,大家估计都能说出个一二,但是估计很少有人能够深入的理解这个协议,原因有这么几个: 协议本身确实复杂 入门教材没选对,太抽象了,导致大家浅尝辄止 学习过程中如果没有配合实践理解,过 ...