SQLServer中提供了相当丰富的系统视图,能够从宏观到微观,从静态到动态反应数据库对象的存储结果、系统性能、系统等待事件等等。同时 也保留了与早期版本兼容性的视图,主要差别在于SQLServer2008提供的新系统视图一是更加全面和丰富、二是更注重命名规则。

SQLServer2008的几乎所有对象信息都存在于sys.objects系统视图中,同时又在不同的系统视图中保留了相应的副本,对于函数、视图、 存储过程、触发器等相应的文本对象,把相应的对象的详细资料存于新的sys.sql_modules视图中。

序号 对象类型 对象类型描述 相关系统表
1 AF = 聚合函数 (CLR) AGGREGATE_FUNCTION N/A
2 C = CHECK 约束 CHECK_CONSTRAINT CHECK_CONSTRAINTS
3 D = DEFAULT(约束或独立) DEFAULT_CONSTRAINT DEFAULT_CONSTRAINTS
4 F = FOREIGN KEY 约束 FOREIGN_KEY_CONSTRAINT FOREIGN_KEYS
5 FN = SQL 标量函数 SQL_SCALAR_FUNCTION SQL_MODULES
6 FS = 程序集 (CLR) 标量函数 CLR_SCALAR_FUNCTION N/A
7 FT = 程序集 (CLR) 表值函数 CLR_TABLE_VALUED_FUNCTION N/A
8 IF = SQL 内联表值函数 SQL_INLINE_TABLE_VALUED_FUNCTION SQL_MODULES
9 IT = 内部表 INTERNAL_TABLE INTERNAL_TABLES
10 P = SQL 存储过程 SQL_STORED_PROCEDURE PROCEDURES
SQL_MODULES
 
11 PC = 程序集 (CLR) 存储过程 CLR_STORED_PROCEDURE N/A
12 PG = 计划指南 PLAN_GUIDE PLAN_GUIDES
13 PK = PRIMARY KEY 约束 PRIMARY_KEY_CONSTRAINT KEY_CONSTRAINTS
14 R = 规则(旧式,独立) RULE SQL_MODULES
15 RF = 复制筛选过程 REPLICATION_FILTER_PROCEDURE SQL_MODULES
16 S = 系统基表 SYSTEM_TABLE OBJECTS
17 SN = 同义词 SYNONYM SYNONYMS
18 SQ = 服务队列 SERVICE_QUEUE SERVICE_QUEUESS
19 TA = 程序集 (CLR) DML 触发器 CLR_TRIGGER N/A
20 TF = SQL 表值函数 SQL_TABLE_VALUED_FUNCTION SQL_MODULES
21 TR = SQL DML 触发器 SQL_TRIGGER TRIGGERS
SQL_MODULES
 
22 U = 表(用户定义类型) USER_TABLE TABLES
23 UQ = UNIQUE 约束 UNIQUE_CONSTRAINT KEY_CONSTRAINTS
24 V = 视图 VIEW VIEWS
SQL_MODULES
 
25 X = 扩展存储过程 EXTENDED_STORED_PROCEDURE EXTENDED_PROCEDURES

对于数据库层面的存储结构,我们可以参看以下视图:

 
--数据库实例的概要情况
SELECT*FROM SYS.SERVERS
WHERE SERVER_ID=0
--兼容性视图SELECT*FROM SYS.SYSSERVERS

--各个数据库的详细信息
SELECT*FROM SYS.DATABASES
--兼容性视图SELECT*FROM SYS.SYSDATABASES

--文件组的详细信息
SELECT*FROM SYS.FILEGROUPS 
--兼容性视图SELECT*FROM SYS.SYSFILEGROUPS

--各个数据库文件的详细信息
SELECT*FROM SYS.MASTER_FILES
--兼容性视图SELECT*FROM SYS.SYSALTFILES

--当前数据库文件的详细信息
SELECT*FROM SYS.DATABASE_FILES
--兼容性视图SELECT*FROM SYS.SYSFILES

--数据空间的详细情况,可以是文件组或分区方案
SELECT*FROM SYS.DATA_SPACES

关于数据库表的存储信息,通过以下系统表我们可以大致了解数据库表在数据库中是如何定义的。以下视图提供了基本的数据库对象信息。

#div_code img { border: 0px none; }
--我们首先创建一张表和一些索引
CREATE TABLE dbo.test
(
  idintIDENTITY(1,1)NOTNULL,
  name char(100)NULL,
CONSTRAINT PK_test PRIMARY KEY CLUSTERED (idASC)
)
CREATE NONCLUSTERED INDEX IX_testONdbo.test(name)

--表和对象详细信息,根据表名称查询出object_id为
--事实上几乎所有的用户对象都出自于SYS.OBJECTS表
SELECT*FROM SYS.OBJECTS
WHERE type_desc='USER_TABLE' AND NAME='TEST'
--兼容性视图SYSOBJECTS
--如果要查询与该表相关的其他所有对象,则可以执行以下语句
SELECT*FROM SYS.OBJECTS
WHERE type_desc='USER_TABLE' AND NAME='TEST' OR
       parent_object_id in
        (SELECTobject_id FROM SYS.OBJECTS
          WHERE type_desc='USER_TABLE' AND NAME='TEST')
         
--表字段详细信息,可以查询出相关column_id
SELECT*FROM SYS.COLUMNS
WHERE OBJECT_ID=5575058
--兼容性视图SYSCOLUMNS

--表索引详细情况,可以清楚的看到存在两个索引
SELECT*FROM SYS.INDEXES WHERE OBJECT_ID=5575058
--兼容性视图SYSINDEXES

--表分区情况,数据库中所有表和索引的每个分区在表中各对应一行
--此处可以看到该表有两个分区,聚集索引即表本身,还有一个是name的非聚集索引
--partition_id 即分区的ID
--hobt_id包含此分区的行的数据堆或B树的ID 
SELECT*FROM SYS.PARTITIONS WHERE OBJECT_ID=5575058

--分配单元情况,数据库中的每个分配单元都在表中占一行
--该表只有和SYS.PARTITIONS配合使用才有意义
SELECT*FROM SYS.ALLOCATION_UNITS

--SYS.ALLOCATION_UNITS和SYS.PARTITIONS一起使用能够反映出某个对象的页面分配和使用情况
SELECT*FROM SYS.ALLOCATION_UNITS U,SYS.PARTITIONS P
WHERE U.TYPE IN (1,3)ANDU.CONTAINER_ID=P.HOBT_IDANDP.OBJECT_ID=5575058
UNION ALL
SELECT*FROM SYS.ALLOCATION_UNITS U,SYS.PARTITIONS P
WHERE U.TYPE=2ANDU.CONTAINER_ID=P.PARTITION_IDANDP.OBJECT_ID=5575058

--返回每个分区的页和行计数信息
SELECT*FROM SYS.DM_DB_PARTITION_STATS WHERE OBJECT_ID=5575058

--返回索引的详细字段情况
SELECT*FROM SYS.INDEX_COLUMNS WHERE OBJECT_ID=5575058
--兼容性视图SYSINDEXKEYS

--以下为根据某个索引名称获取其相关字段的语句
DECLARE @index_field_names VARCHAR(500)
SET@index_field_names='';
SELECT@index_field_names=@index_field_names+c.name+','
  FROM SYS.INDEX_COLUMNS a,SYS.INDEXES b,SYS.COLUMNS c
WHERE a.object_id=b.object_idANDa.index_id=b.index_id
  ANDa.object_id=c.object_idANDa.column_id=c.column_id
  ANDb.name='IX_test2'
ORDER BY a.index_column_id
SET@index_field_names=LEFT(@index_field_names,LEN(@index_field_names)-1)
PRINT @index_field_names

--CHECK约束,数据来源sys.objects.type='C'
SELECT*FROM SYS.CHECK_CONSTRAINTS WHERE OBJECT_ID=?
--兼容性视图SYSCONSTRAINTS

--数据来源sys.objects.type=D
SELECT*FROM SYS.DEFAULT_CONSTRAINTS WHERE OBJECT_ID=?
--兼容性视图SYSCONSTRAINTS

--主键或唯一约束,数据来源sys.objects.type PK 和UQ
SELECT*FROM SYS.KEY_CONSTRAINTS WHERE OBJECT_ID=?
--兼容性视图SYSCONSTRAINTS

--外键,数据来源sys.object.type=F
SELECT*FROM SYS.FOREIGN_KEYS WHERE OBJECT_ID=? 
--兼容性视图SYSREFERENCES

--触发器
SELECT*FROM SYS.TRIGGERS WHERE OBJECT_ID=? 

--注释
SELECT*FROM SYS.SQL_MODULES
--兼容性视图SYSCOMMENTS

--数据库用户表
SELECT*FROM SYS.DATABASE_PRINCIPALS
--兼容性视图SYSUSERS

--数据库数据类型表
SELECT*FROM SYS.TYPES
--兼容性视图SYSTYPES

http://www.cnblogs.com/luluping/archive/2012/11/05/2754639.html

SQLSERVER系统视图,系统表,sys.sql_modules视图的更多相关文章

  1. Oracle 中的一些重要V$ 动态性能视图,系统视图和表

    v$database:数据库的信息,如数据库名,创建时间等. v$instance 实例信息,如实例名,启动时间. v$parameter 参数信息,select * from v$parameter ...

  2. [转帖]总结ORACLE系统视图及表大全

    总结ORACLE系统视图及表大全:dba_开头.....dba_users 数据库用户信息dba_segments 表段信息dba_extents 数据区信息dba_objects 数据库对象信息db ...

  3. 【转】 Oracle 中的一些重要V$ 动态性能视图,系统视图和表

    v$database:数据库的信息,如数据库名,创建时间等. v$instance 实例信息,如实例名,启动时间. v$parameter 参数信息,select * from v$parameter ...

  4. SQLSERVER和ORACLE系统表获取表名 列名以及列的注释

    在工作中从数据库取的数据要导出来,但是发现导出的EXCEL中列名都是字段名(英文),为此搜集资料怎么把字段名变为中文名称,而发现ORACLE和SQLSERVER(用的SQLSERVER2008R2)又 ...

  5. Django 视图系统

    Django 视图系统 概念 一个视图函数,简称视图,是一个简单的Python函数,用于接受Web请求并返回Web响应. 通常将视图函数写在project或app目录中的名为views.py文件中 简 ...

  6. Django框架详细介绍---视图系统

    Django视图系统 1.什么是视图 在Django中,一个视图函数/类,称为视图.实质就是一个用户自定义的简单函数,用来接收WEB请求并xing响应请求,响应的内容可以是一个HTML文件.重定向.一 ...

  7. Django框架简介-视图系统

    2.3 视图系统 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档 ...

  8. python 终极篇 --- django 视图系统

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  9. Django框架——基础之视图系统(View.py)

    Django框架之View.py(视图文件) 1. 视图简介 视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面. 它对外接收用户请求,对内调度模型层和模版层,统合数 ...

随机推荐

  1. js回车动态添加表格,右键动态删除表格行

    <script type="text/javascript" language="javascript">//屏蔽浏览器右键function sto ...

  2. VC保存当面某个区域的图片

    void ViewReportDlg::CopyScreenToBitmap() { CDC *cdc = this->GetDC(); HDC wnd = cdc->GetSafeHdc ...

  3. 在CSS中通过@font-face属性来实现网页中嵌入特殊字体。

    首先获取要使用字体的三种文件格式.EOT..TTF或.OTF..SVG,确保能在主流浏览器中都能正常显示该字体..EOT,适用于Internet Explorer 4.0+.TTF或.OTF,适用于F ...

  4. MySql使用游标Cursor循环(While)更新数据

    #要修改的变量 DECLARE var_ID VARCHAR(50) DEFAULT ''; #需要修改的数据的数量 DECLARE var_UpdateCount INT; #当前循环次数 DECL ...

  5. react native 之 react-native-image-picke的详细使用图解

    最近需要在react native项目中集成相机和相册的功能,于是在网上找了一个好用的第三方插件:react-native-image-picke. 该插件可以同时给iOS和Android两个平台下使 ...

  6. Redis中struct运用

    c#操作缓存例如redis比较推荐ServiceStack 在redis中运用key-value存储数据,但是遇到结构体该如何处理,是类可通过get<type>(key)获得,那struc ...

  7. SQL if exists database总是出现语法错误

    SQL if exists总是出现语法错误.望高手纠正._百度知道 http://zhidao.baidu.com/link?url=7VyzcX0V1A3lhBQ1emNt2sTk7QGDuijOq ...

  8. 移动端头像上传AJax input file

    jQuery中的Ajax不能支持 input file 需要用ajaxupload.js但是先需要引入jQuery文件 <script src="__PUBLIC__/js/ajaxf ...

  9. js点击空白处弹窗消失

    $(document).mousedown(function(e){ var _list = $('#pop'); if(!_list.is(e.target) && _list.ha ...

  10. web开发实战--图片裁剪和上传

    前言: 最近的开发中, 有一个上传头像的任务. 由于头像本身的特殊性, 其一般流程为选择图片, 编辑裁剪区域, 再继而上传图片操作. 看似简单的东西, 实则是挺麻烦的一件事. 借助这次开发机会, 来具 ...