Quantcast
Channel: CodeSection,代码区,SQL Server(mssql)数据库 技术分享 - CodeSec
Viewing all articles
Browse latest Browse all 3160

数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息

$
0
0

常用SQLServer的朋友们,绝大部分情况下,我们写SQL脚本主要用来处理我们自己的数据,比如读取、插入数据等。但在有些情况下,我们可能要查看我们定义的一些元素,比如我们定义的表都有哪些、表结构如何、存储过程的源码等等。这时候,我们学习的常规的SQL脚本可能就无法处理了。


数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息

比如您要写一个管理数据库的程序,就要知道数据库中有什么表、表结构如何,以及视图、存储过程的脚本源码等。下面我就说说如何获取数据库的结构信息。

获取数据库及配置信息

1、获取数据库配置信息

execsp_server_info
数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息

2、返回所有数据库

execsp_databases 获取系统中的用户表

有三种方法可以使用,分别是:

1、利用sysobjects系统表或 sys.objects 目录视图

select* fromsysobjects wherextype='U' select* fromsys.objects wherextype='U'

2、利用 sys.tables 目录视图

select* fromsys.tables

3、利用存储过程 sp_tables

execsp_tables 获取系统中所有的用户视图

有两种方法可以使用,分别是:

1、利用sysobjects系统表或 sys.objects 目录视图

select* fromsysobjects wherextype='V' select* fromsys.objects wherextype='V'

2、利用 sys.tables 目录视图

select* fromsys.tables 获取数据库中所有的用户存储过程

有两种方法可以使用,分别是:

1、利用sysobjects系统表或 sys.objects 目录视图

select* fromsysobjects wherextype='P' select* fromsys.objects wherextype='P'

2、利用 sys.procedures 目录视图

select* fromsys.procedures 获取存储过程或视图的定义脚本

要用到系统视图 sys.all_objects 和 sys.sql_modules ,写法如下:

selecta. name,a.[type],b.[definition] fromsys.all_objectsa,sys.sql_modulesb wherea.is_ms_shipped=0 anda.object_id=b.object_id anda.[type] in('P','V') order bya.[ name] asc
数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息

其中 sys.all_objects 是 sql server 2012 版本中的系统视图,在 更早期的 sql server 版本中,应该用 sys.objects,同时,sys.objects 在 2012 中也是可以用的,只不过考虑到后续兼容性,在新版本中,用新的 name 还是比较好。

sys.all_objects.type字段常用的类型有: P = 存储过程、V = 视图、U = 表(用户定义类型)、TT = 表类型 、AF = 聚合函数等。

sys.sql_modules.definition返回的就是定义存储过程或视图的脚本。 获取表的字段信息

1、如果单纯获取字段名称,只需要用到系统表 syscolumns 。

select* fromsyscolumns whereid=object_id('表名')

2、如果要获取字段和对应的数据类型,需要用到系统表 syscolumns 和 systypes 。

selecta. name as[ column],b. name astype fromsyscolumnsa,systypesb wherea.id=object_id('表名')anda.xtype=b.xtype
数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息
3、获取更详细的表结构信息,调用 [INFORMATION_SCHEMA].[COLUMNS] 。 SELECTc.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH, c.COLUMN_DEFAULT, c.IS_NULLABLE, c.NUMERIC_PRECISION, c.NUMERIC_SCALE FROM[INFORMATION_SCHEMA].[COLUMNS]c WHERETABLE_NAME='idata'
数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息

如果您能够活用这些系统内置的表、视图和存储过程,您总可以找到方法方便的查到想要知道的数据元素信息。

希望对您有所帮助!


Viewing all articles
Browse latest Browse all 3160

Trending Articles