2024年1月17日发(作者:)

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

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

序对象类型

1

2

3

4

5

6

7

AF = 聚合函数

(CLR)

C = CHECK 约束

D = DEFAULT(约束或独立)

对象类型描述

相关系统表

AGGREGATE_FUNCN/A

TION

CHECK_CONSTRAINCHECK_CONT

STRAINTS

DEFAULT_CONSTRADEFAULT_COINT

NSTRAINTS

F = FOREIGN KFOREIGN_KEY_CONFOREIGN_KEEY 约束

STRAINT

YS

FN = SQL 标量函数

SQL_SCALAR_FUNCSQL_MODULTION

ES

FS = 程序集 (CLCLR_SCALAR_FUNCN/A

R) 标量函数

TION

FT = 程序集 (CLCLR_TABLE_VALUEN/A

R) 表值函数

D_FUNCTION

SQL_INLINE_TABLEIF = SQL 内联表SQL_MODUL_VALUED_FUNCTIO值函数

ES

N

IT = 内部表

INTERNAL_TABLE

INTERNAL_TABLES

8

9

PROCEDURES

P = SQL 存储过SQL_STORED_PRO10

SQL_MODUL程

CEDURE

ES

11

PC = 程序集 (CLCLR_STORED_PRON/A

R) 存储过程

CEDURE

PLAN_GUIDE

PLAN_GUIDES

12

PG = 计划指南

13

PK = PRIMARY PRIMARY_KEY_CONKEY_CONSTRKEY 约束

STRAINT

AINTS

SQL_MODUL14

R = 规则(旧式,RULE

独立)

15

ES

RF = 复制筛选过REPLICATION_FILTESQL_MODUL程

R_PROCEDURE

ES

SYSTEM_TABLE

SYNONYM

SERVICE_QUEUE

OBJECTS

SYNONYMS

SERVICE_QUEUESS

N/A

16

S = 系统基表

17

SN = 同义词

18

SQ = 服务队列

19

20

TA = 程序集 (CLCLR_TRIGGER

R) DML 触发器

TF = SQL 表值函SQL_TABLE_VALUESQL_MODUL数

D_FUNCTION

ES

TR = SQL DML

SQL_TRIGGER

触发器

U = 表(用户定义USER_TABLE

类型)

UQ = UNIQUE

约束

TRIGGERS

SQL_MODULES

TABLES

21

22

23

UNIQUE_CONSTRAIKEY_CONSTRNT

AINTS

VIEWS

SQL_MODULES

24

V = 视图

VIEW

25

X = 扩展存储过程

EXTENDED_STOREEXTENDED_PD_PROCEDURE

ROCEDURES

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

--数据库实例的概要情况

SELECT*FROM S

WHERE SERVER_ID=0

--兼容性视图SELECT*FROM VERS

--各个数据库的详细信息

SELECT*FROM SES

--兼容性视图SELECT*FROM ABASES

--文件组的详细信息

SELECT*FROM OUPS

--兼容性视图SELECT*FROM EGROUPS

--各个数据库文件的详细信息

SELECT*FROM _FILES

--兼容性视图SELECT*FROM FILES

--当前数据库文件的详细信息

SELECT*FROM SE_FILES

--兼容性视图SELECT*FROM ES

--数据空间的详细情况,可以是文件组或分区方案

SELECT*FROM _SPACES

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

#div_code img { border: 0px none; }

--我们首先创建一张表和一些索引

CREATE TABLE

(

idintIDENTITY(1,1)NOTNULL,

name char(100)NULL,

CONSTRAINT PK_test PRIMARY KEY CLUSTERED (idASC)

)

CREATE NONCLUSTERED INDEX IX_(name)

--表和对象详细信息,根据表名称查询出object_id为

--事实上几乎所有的用户对象都出自于S表

SELECT*FROM S

WHERE type_desc='USER_TABLE' AND NAME='TEST'

--兼容性视图SYSOBJECTS

--如果要查询与该表相关的其他所有对象,则可以执行以下语句

SELECT*FROM S

WHERE type_desc='USER_TABLE' AND NAME='TEST' OR

parent_object_id in

(SELECTobject_id FROM S

WHERE type_desc='USER_TABLE' AND NAME='TEST')

--表字段详细信息,可以查询出相关column_id

SELECT*FROM S

WHERE OBJECT_ID=5575058

--兼容性视图SYSCOLUMNS

--表索引详细情况,可以清楚的看到存在两个索引

SELECT*FROM S WHERE OBJECT_ID=5575058

--兼容性视图SYSINDEXES

--表分区情况,数据库中所有表和索引的每个分区在表中各对应一行

--此处可以看到该表有两个分区,聚集索引即表本身,还有一个是name的非聚集索引

--partition_id 即分区的ID

--hobt_id包含此分区的行的数据堆或B树的ID

SELECT*FROM IONS WHERE OBJECT_ID=5575058

--分配单元情况,数据库中的每个分配单元都在表中占一行

--该表只有和IONS配合使用才有意义

SELECT*FROM TION_UNITS

--TION_UNITS和IONS一起使用能够反映出某个对象的页面分配和使用情况

SELECT*FROM TION_UNITS U,IONS P

WHERE IN (1,3)NER_ID=__ID=5575058

UNION ALL

SELECT*FROM TION_UNITS U,IONS P

WHERE =NER_ID=ION__ID=5575058

--返回每个分区的页和行计数信息

SELECT*FROM _DB_PARTITION_STATS WHERE OBJECT_ID=5575058

--返回索引的详细字段情况

SELECT*FROM _COLUMNS WHERE OBJECT_ID=5575058

--兼容性视图SYSINDEXKEYS

--以下为根据某个索引名称获取其相关字段的语句

DECLARE @index_field_names VARCHAR(500)

SET@index_field_names='';

SELECT@index_field_names=@index_field_names++','

FROM _COLUMNS a,S b,S c

WHERE _id=__id=_id

_id=__id=_id

='IX_test2'

ORDER BY _column_id

SET@index_field_names=LEFT(@index_field_names,LEN(@index_field_names)-1)

PRINT @index_field_names

--CHECK约束,数据来源='C'

SELECT*FROM _CONSTRAINTS WHERE OBJECT_ID=?

--兼容性视图SYSCONSTRAINTS

--数据来源=D

SELECT*FROM T_CONSTRAINTS WHERE OBJECT_ID=?

--兼容性视图SYSCONSTRAINTS

--主键或唯一约束,数据来源 PK 和UQ

SELECT*FROM _CONSTRAINTS WHERE OBJECT_ID=?

--兼容性视图SYSCONSTRAINTS

--外键,数据来源=F

SELECT*FROM N_KEYS WHERE OBJECT_ID=?

--兼容性视图SYSREFERENCES

--触发器

SELECT*FROM RS WHERE OBJECT_ID=?

--注释

SELECT*FROM _MODULES

--兼容性视图SYSCOMMENTS

--数据库用户表

SELECT*FROM SE_PRINCIPALS

--兼容性视图SYSUSERS

--数据库数据类型表

SELECT*FROM

--兼容性视图SYSTYPES