常用SQLServer的巧用朋友们,绝大部分情况下,句查我们写SQL脚本主要用来处理我们自己的构信数据,比如读取、巧用插入数据等。句查但在有些情况下,构信我们可能要查看我们定义的巧用一些元素,比如我们定义的句查表都有哪些、表结构如何、构信存储过程的巧用源码等等。这时候,句查我们学习的构信常规的SQL脚本可能就无法处理了。 [[253422]]                    比如您要写一个管理数据库的巧用程序,就要知道数据库中有什么表、句查表结构如何,构信以及视图、存储过程的脚本源码等。下面我就说说如何获取数据库的结构信息。 获取数据库及配置信息1、获取数据库配置信息 复制exec sp_server_info                              1.                                         2、返回所有数据库 复制exec sp_databases                              1.                                        获取系统中的用户表有三种方法可以使用,企商汇分别是: 1、利用sysobjects系统表或sys.objects目录视图 复制select * from sysobjects where xtype=U                              select * from sys.objects where xtype=U                              1.2.                                                                2、利用sys.tables目录视图 复制select * from sys.tables                              1.                                        3、利用存储过程sp_tables 复制exec sp_tables                              1.                                        获取系统中所有的用户视图有两种方法可以使用,分别是: 1、利用sysobjects系统表或sys.objects目录视图 复制select * from sysobjects where xtype=V                              select * from sys.objects where xtype=V                              1.2.                                                                2、利用sys.tables目录视图 复制1.                                                                复制select * from sys.tables                              1.                                        获取数据库中所有的用户存储过程有两种方法可以使用,分别是: 1、利用sysobjects系统表或sys.objects目录视图 复制select * from sysobjects where xtype=P                              select * from sys.objects where xtype=P                              1.2.                                                                2、利用sys.procedures目录视图 复制select * from sys.procedures                              1.                                        获取存储过程或视图的定义脚本要用到系统视图sys.all_objects和sys.sql_modules,写法如下: 复制select a.name,a.[type],b.[definition]                               from sys.all_objects a,sys.sql_modules b                              where a.is_ms_shipped=0 and a.object_id = b.object_id and a.[type] in (P,V)                              order by a.[name] asc                             1.2.3.4.                                                                 其中 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 * from syscolumns where id=object_id(表名)                              1.                                        2、如果要获取字段和对应的数据类型,需要用到系统表syscolumns和systypes。 复制select a.name as [column],b.name as type                               from syscolumns a,systypes b                               where a.id=object_id(表名) and a.xtype=b.xtype                              1.2.3.                                                                 3、获取更详细的表结构信息,调用[INFORMATION_SCHEMA].[COLUMNS]。 复制SELECT 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_SCALE                              FROM [INFORMATION_SCHEMA].[COLUMNS] c                              WHERE TABLE_NAME = idata                              1.2.3.4.5.6.7.8.9.10.11.                                                                 如果您能够活用这些系统内置的表、视图和存储过程,您总可以找到方法方便的查到想要知道的数据元素信息。 希望对您有所帮助!   |