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

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

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

--数据库实例的概要情况
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

SQLSERVER中常用的系统视图的更多相关文章

  1. vs2015中SQLSERVER数据库项目引用系统视图

    近期使用VS中的SQLSERVER数据库项目进行项目开发,由于有很多自动化脚本会访问系统视图,例如sysobjects之类的,在项目中的脚本总是提示无法解析的引用,解决办法如下: 添加数据库引用 添加 ...

  2. Oracle中常用的系统函数

    本文主要来梳理下Oracle中的常用的系统函数,掌握这些函数的使用,对于我们编写SQL语句或PL/SQL代码时很有帮助,所以这也是必须掌握的知识点. 本文主要包括以下函数介绍:1.字符串函数2. 数值 ...

  3. sqlserver中 事物 索引及视图

      事务 1.什么是事务 事务是一个不可分割的工作逻辑单元,它包含了一组数据库的操作命令,并且所有命令作为一个整体一起向系统提交或撤销操作请求,即要么都执行,要么都不执行 2.事务的4个属性 (1). ...

  4. sqlserver中常用的全局变量

    变量 Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量.局部变量 局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部.局部 ...

  5. 【Oracle】Oracle中常用的系统函数

    Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能.函数可以接受零个或者多个输入参数,并返回一个输出结果.在Oracle还可以自定义函数,关于更多信息可以查 ...

  6. sqlserver中常用的四个选项(NOCOUNT/ANSI_NULLS/QUOTED_IDENTIFIER/ XACT_ABORT)

    1 NOCOUNT选项 当 SET NOCOUNT 为 ON 时,不返回计数.当 SET NOCOUNT 为 OFF 时,返回计数. eg: if object_id(N'table_test',N' ...

  7. SQLserver中常用的函数及实例

    聚合函数 as是可以起别名的,在select和from之间的是表示列名,可以不加单引号)(聚合函数中的count不仅能对数字进行操作还能对字符型进行操作,其余的只能对数字操作) 最小值 select  ...

  8. sqlserver中常用的windows命令行的操作

    1.删除指定目录下指定时间之前的文件: ), ), @sqltxtdel varchar(max) --指定的删除时间 set @deldate= '-8' --指定的删除路径 set @bakpat ...

  9. Oracle中常用的系统表

    1.dba开头的表 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数据库对象信息 dba_tablespaces ...

随机推荐

  1. 【转】Jmeter入门:如何建立和使用Jmeter测试环境

    一.工具描述 apache jmeter是100%的java桌面应用程序,它被设计用来加载被测试软件功能特性.度量被测试软件的性能.设计jmeter的初衷是测试web应用, 后来又扩充了其它的功能.j ...

  2. java代码------------条件运算符 ?:

    总结: package com.sads; //?: //这个运算符是条件运算符 //条件式?值:值 public class Sd { public static void main(String[ ...

  3. Java测试用例简介

    最近需要向组内其他成员普及一下关于Java测试用例的相关知识,特在此进行一下简单的学习和总结. JUnit简介 JUnit是一个开源的Java单元测试框架,JUnit4对原有的JUnit框架进行了大幅 ...

  4. 第四章 istio快速入门(快速安装)

    4.1 环境介绍 K8s 1.9 以上版本. 4.2 快速部署Istio 下载:  https://github.com/istio/istio/releases/,  下载 1.1.0-snapsh ...

  5. 【BZOJ】1008: [HNOI2008]越狱(组合数学)

    题目 题目描述 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 输入输出格式 ...

  6. 什么是 MVC ?

    本篇博客打算简单介绍一下MVC是什么,为接下来MVC的学习做一下铺垫. MVC是一种架构设计模式,是一种设计理念.是为了达到分层设计的目的,从而使代码解耦,便于维护和代码的复用.MVC是3个单词的缩写 ...

  7. verilog 之数字电路 寄存器,触发器。

    我一直听说没有由code到circuit就只是入门了.实在没办法了.我想了一招,一个一个的写,然后看RTL,然后分析.这是第一篇. 1.触发器. 没有复位,置位.posedge clk 是触发沿时钟. ...

  8. springcloud(三) eureka集群

    上一节讲到user微服务和order微服务和eureka注册中心一起使用,那么问题来了如何注册中心挂了怎么办?ok, 注册中心集群就来了. 原理图: 注意euraka 之间是通过复制(replicat ...

  9. requests模块session处理cookie 与基于线程池的数据爬取

    引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: #!/usr/bin/ ...

  10. Memcache线上常见问题(缓存雪崩、缓存无底洞、永久数据被踢)

    缓存雪崩现象 一般是由于某个节点失效,导致其它节点的缓存命中率下降,缓存中缺失的数据直接去数据库查询,短时间内造成数据库服务器崩溃. 或者是由于缓存周期性失效,比如设置每隔6个小时失效一次,那么每6个 ...