经常使用SQLServer的朋友,大多数情况下,我们编写SQL脚本来处理自己的数据,比如读取和插入数据。但是在某些情况下,我们可能要查看我们定义的一些元素,比如我们定义的表是什么,表结构是什么,存储过程的源代码等等。这时候,我们学习的常规SQL脚本可能就处理不了了。比如你要写一个管理数据库的程序,你需要知道数据库中有哪些表,表的结构是什么,视图和存储过程的脚本源码。先说说如何获取数据库的结构信息。获取数据库及配置信息1.获取数据库配置信息execsp_server_info2.返回所有数据库execsp_databases获取系统中用户表的方法有3种,分别是:1.使用sysobjects系统表或??者sys.objects目录查看select*fromsysobjectswherextype='U'select*fromsys.objectswhereextype='U'2。使用sys.tables目录查看select*fromsys.tables3。使用存储过程sp_tablesexecsp_tables获取系统中所有用户视图。有两种方法可以使用,即:1.使用sysobjects系统表或??sys.objects目录视图select*fromsysobjectswhereextype='V'select*fromsys.objectswhereextype='V'2.使用sys.tables目录视图select*fromsys.tables获取数据库中的所有用户存储过程。有两种使用方法,分别是:1.使用sysobjects系统表或??者sys.objects目录视图select*fromsysobjectswhereextype='P'select*fromsys.objectswhereextype='P'2.使用sys.procedures目录视图select*fromsys.procedures获取存储过程或视图定义脚本需要使用系统视图sys.all_objects和sys.sql_modules,写法如下:selecta.name,a.[type],b.[definition]fromsys.all_objectsa,sys.sql_modulesbwherea.is_ms_shipped=0anda.object_id=b。object_idanda.[type]in('P','V')orderbya.[name]asc其中sys.all_objects是SQLServer2012版本中的系统视图,在SQLServer早期版本中,应该使用sys.objects,在同时,sys.objects也于2012年推出,但考虑到后续兼容性,在新版本中,最好使用一个新名称。sys.all_objects.type字段常见的类型有:P=存储过程,V=视图,U=表(用户自定义类型),TT=表类型,AF=聚合函数等。sys.sql_modules.definition返回脚本定义存储过程或视图。获取表1的字段信息,如果单纯获取字段名,只需要使用系统表syscolumns即可。select*fromsyscolumnswhereid=object_id('tablename')2.如果要获取字段和对应的数据类型,需要用到系统表syscolumns和systypes。selecta.nameas[column],b.nameastypefromsyscolumnsa,systypesbwherea.id=object_id('tablename')anda.xtype=b.xtype3.要获取更详细的表结构信息,调用[INFORMATION_SCHEMA].[COLUMNS]。如果可以,请选择c.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_SCALEFROM[INFORMATION_SCHEMA].[COLUMNS]_cWHERETAB这些系统内置的表、视图和存储过程,你总能想办法轻松找到你想知道的数据元素信息。希望能帮到你!
