SQLServer 系统视图 (部分)

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

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

序号对象类型对象类型描述相关系统表
1AF = 聚合函数 (CLR)AGGREGATE_FUNCTIONN/A
2C = CHECK 约束CHECK_CONSTRAINTCHECK_CONSTRAINTS
3D = DEFAULT(约束或独立)DEFAULT_CONSTRAINTDEFAULT_CONSTRAINTS
4F = FOREIGN KEY 约束FOREIGN_KEY_CONSTRAINTFOREIGN_KEYS
5FN = SQL 标量函数SQL_SCALAR_FUNCTIONSQL_MODULES
6FS = 程序集 (CLR) 标量函数CLR_SCALAR_FUNCTIONN/A
7FT = 程序集 (CLR) 表值函数CLR_TABLE_VALUED_FUNCTIONN/A
8IF = SQL 内联表值函数SQL_INLINE_TABLE_VALUED_FUNCTIONSQL_MODULES
9IT = 内部表INTERNAL_TABLEINTERNAL_TABLES
10P = SQL 存储过程SQL_STORED_PROCEDUREPROCEDURES
SQL_MODULES
 
11PC = 程序集 (CLR) 存储过程CLR_STORED_PROCEDUREN/A
12PG = 计划指南PLAN_GUIDEPLAN_GUIDES
13PK = PRIMARY KEY 约束PRIMARY_KEY_CONSTRAINTKEY_CONSTRAINTS
14R = 规则(旧式,独立)RULESQL_MODULES
15RF = 复制筛选过程REPLICATION_FILTER_PROCEDURESQL_MODULES
16S = 系统基表SYSTEM_TABLEOBJECTS
17SN = 同义词SYNONYMSYNONYMS
18SQ = 服务队列SERVICE_QUEUESERVICE_QUEUESS
19TA = 程序集 (CLR) DML 触发器CLR_TRIGGERN/A
20TF = SQL 表值函数SQL_TABLE_VALUED_FUNCTIONSQL_MODULES
21TR = SQL DML 触发器SQL_TRIGGERTRIGGERS
SQL_MODULES
 
22U = 表(用户定义类型)USER_TABLETABLES
23UQ = UNIQUE 约束UNIQUE_CONSTRAINTKEY_CONSTRAINTS
24V = 视图VIEWVIEWS
SQL_MODULES
 
25X = 扩展存储过程EXTENDED_STORED_PROCEDUREEXTENDED_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
(
  id
intIDENTITY(1,1)NOTNULL
,
  name char(
100)NULL
,
CONSTRAINT PK_test PRIMARY KEY CLUSTERED (id
ASC
)
)
CREATE NONCLUSTERED INDEX IX_test
ONdbo.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
        (
SELECT
object_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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值