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. OpenCV在VS2005下的配置

    http://bbs.ednchina.com/BLOG_ARTICLE_3019518.HTM 这是自己今天刚弄好了之后的一点经历.不是很详细.以后有时间一定要整理整理.

  2. kafka 订单应用需求

    kafka的介绍就不说了,网上会找到一大堆. 为了公司做报表需要对卡券订单的销售情况做总结,所以每次下单的时候都要给卡券活动模块传递一次消息,并把订单的信息发送给活动,活动做相应的数据操作,因为数据量 ...

  3. 错误笔记:Caused by: java.lang.StackOverflowError

    今天在将一个map转化成json出现堆栈异常,排查原因如下:出现循环递归( rootMap.put("rootMap", rootMap);),栈内存肯定耗光 代码: /** * ...

  4. 关于阿里 阿里巴巴共享业务事业部UED团队 出品的sui基于zepto的开源UI框架的使用心得

    1.项目官网地址:http://m.sui.taobao.org/ 2.项目使用可以参考开始使用和示例 3.项目是放在 Github 上的 https://github.com/sdc-alibaba ...

  5. core Bluetooth(蓝牙4.0)

    蓝牙4.0以低功耗著称,一般也叫BLE(Bluetooth Low Energy). 目前主要应用的场景有:智能家居.运动手环和室内导航等. 利用core Bluetooth框架可以实现苹果设备与第三 ...

  6. js 自运行函数作用

    var obj = new Object(); function test2() { for (var i=1;i<5;i++) { obj['f'+i] = function() { retu ...

  7. Asp.net Web.Config - 配置元素 trace

    一.trace的元素的属性 属性 说明 enabled 是否启用应用程序跟踪.为了使用 Trace.axd 查看器,必须启用跟踪.默认情况下,Trace.axd 查看器被添加到httpHandlers ...

  8. js对象详解

    js自定义对象 一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在J ...

  9. SYSLOG审记日志的配置。

    前言 syslog是UNIX系统中提供的一种日志记录方法(RFC3164),syslog本身是一个服务器,程序中凡是使用syslog记录的信息都会发送到该服务器,服务器根据配置决定此信息是否记录,是记 ...

  10. JavaScript面向对象,及面向对象的特点,和如何构造函数

    1.面向对象和面向过程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了: 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是 ...