SQL系统表和兼容性视图使用
SQL系统表和兼容性视图使用
sql server系统表详细说明
名称 | 地址 | 说明 |
---|---|---|
sysaltfiles | 主数据库 | 保存数据库的文件 |
syscharsets | 主数据库 | 字符集与排序顺序 |
sysconfigures | 主数据库 | 配置选项 |
syscurconfigs | 主数据库 | 当前配置选项 |
sysdatabases | 主数据库 | 服务器中的数据库 |
syslanguages | 主数据库 | 语言 |
syslogins | 主数据库 | 登陆帐号信息 |
sysoledbusers | 主数据库 | 链接服务器登陆信息 |
sysprocesses | 主数据库 | 进程 |
sysremotelogins | 主数据库 | 远程登录帐号 |
syscolumns | 每个数据库 | 列 |
sysconstrains | 每个数据库 | 限制 |
sysfilegroups | 每个数据库 | 文件组 |
sysfiles | 每个数据库 | 文件 |
sysforeignkeys | 每个数据库 | 外部关键字 |
sysindexs | 每个数据库 | 索引 |
sysmembers | 每个数据库 | 角色成员 |
sysobjects | 每个数据库 | 所有数据库对象 |
syspermissions | 每个数据库 | 权限 |
systypes | 每个数据库 | 用户定义数据类型 |
sysusers | 每个数据库 | 用户 |
1、查看表和试图
SELECT * FROM sys.objects WHERE object_id = object_id('表名或视图名')
在sqlserver中一般可通过查询sys.objects系统表来得知结果,不过可以有更方便的方法
如下:
if object_id('tb_table') is not null print 'exist' else print'not exist'
如上,可用object_id()来快速达到相同的目的,tb_table就是我将要创建的资源的名称,所以要先判断当前数据库中不存在相同的资源
object_id()可接受两个参数,第一个如上所示,代表资源的名称,上面的就是表的名字,但往往我们要说明我们所要创建的是什么类型的资源,
这样sql可以明确地在一种类型的资源中查找是否有重复的名字,如下:
if object_id('tb_table','u') is not null print 'exist' else print'not exist'
第二个参数 “u” 就表示tb_table是用户创建的表,即:USER_TABLE地首字母简写
查询sys.objects中可得到各种资源的类型名称(TYPE列),这里之举几个主要的例子
2、查看表的列名
select * from syscolumns where id=object_id('表名') and name='列名'
3、查看数据库
select * from sys.databases where name = 'student'
4、查看备份设备
"select * from sys.backup_devices where name ='backupdb' (添加备份设备:exec sp_addumpdevice 'disk','backupdb','d:\\backup\\backupdb.bak')
5、查看数据文件
select name, physical_name dbfile from sys.master_files where database_id=db_id('student') master数据库中sysdatabases表(是sqlserver中所有的数据库的库名) :
如果你要查询的是所有数据库(用户/系统):
select * from master..sysdatabases
如果你要查询的是用户数据库,则使用:
select * from master..sysdatabases where dbid > 4
如果你要查询的是系统数据库,只需要把where字句改为dbid < 4即可。
6、查看执行的sql语句
SELECT cacheobjtype,objtype,usecounts,sql from sys.syscacheobjects where sql not like'%cach%' and sql not like '%sys.%'
2.对应数据库中sysobjects表(反应的是相应数据库中所有的对象):
这个表的用处是最大的,因为它里面存放的有:表(系统/用户)、存储过程(系统/用户)、视图、主键、外键等。
这里就不一一说明了。
比如你sqlserver中有个数据库名叫 test,如果要查询该数据库中的所有表对象:
select * from test..sysobjects where type = ’u’ or type = ’s’
这里的type = ’u’是表示用户表对象,type = ’s’是系统表对象,怎样单独查询用户表对象或者系统表对象就不用说了吧。
如果你要查询的是存储过程当然也分了系统和用户了:
这个是查询数据库中所有存储过程
select * from test..sysobjects where type = ’p’
如果你要查询的是用户存储过程则加上 and category <> 2 即可。
查询系统存储过程就不用说了吧(category = 2 谁不知道。。。)
查询视图与查询存储过程一样,比如:
你查询的是数据库中所有视图
select * from test..sysobjects where type = ’v’
如果你要查询的是用户视图则加上 and category <> 2 即可。
其他的就不说了,就把 它们的type给大家说下:
推荐阅读
-
SQL查看数据库所用用户表数量和使用的空间
-
使用SQL查询所有数据库名和表名
-
[sql Server]除非另外还指定了TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效
-
T-Sql(四)表关联和视图(view)
-
SQL Server遍历表中记录的2种方法(使用表变量和游标)
-
SQL Server遍历表中记录的2种方法(使用表变量和游标)
-
SQL Server数据库中的表和视图怎么导出?
-
SQL 2005使用专用管理员连接(DAC)的技巧及修改系统表的方法
-
SQL数据库表union和unionall的使用和介绍
-
SQL系统表和兼容性视图使用