zoukankan      html  css  js  c++  java
  • 数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息

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

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

    获取数据库及配置信息

    1、获取数据库配置信息

    1. exec sp_server_info  

    2、返回所有数据库

    1. exec sp_databases  

    获取系统中的用户表

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

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

    1. select * from sysobjects where xtype='U'  
    2. select * from sys.objects where xtype='U'  

    2、利用sys.tables目录视图

    1. select * from sys.tables  

    3、利用存储过程sp_tables

    1. exec sp_tables  

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

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

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

    1. select * from sysobjects where xtype='V'  
    2. select * from sys.objects where xtype='V'  

    2、利用sys.tables目录视图

     
    1. select * from sys.tables  

    获取数据库中所有的用户存储过程

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

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

    1. select * from sysobjects where xtype='P'  
    2. select * from sys.objects where xtype='P'  

    2、利用sys.procedures目录视图

    1. select * from sys.procedures  

    获取存储过程或视图的定义脚本

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

    1. select a.name,a.[type],b.[definition]   
    2. from sys.all_objects a,sys.sql_modules b  
    3. where a.is_ms_shipped=0 and a.object_id = b.object_id and a.[type] in ('P','V')  
    4. order by a.[name] asc 

    其中 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

    1. select * from syscolumns where id=object_id('表名')  

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

    1. select a.name as [column],b.name as type   
    2. from syscolumns a,systypes b   
    3. where a.id=object_id('表名') and a.xtype=b.xtype  

    3、获取更详细的表结构信息,调用[INFORMATION_SCHEMA].[COLUMNS]

    1. SELECT c.TABLE_SCHEMA ,  
    2.  c.TABLE_NAME ,  
    3.  c.COLUMN_NAME ,  
    4.  c.DATA_TYPE ,  
    5.  c.CHARACTER_MAXIMUM_LENGTH ,  
    6.  c.COLUMN_DEFAULT ,  
    7.  c.IS_NULLABLE ,  
    8.  c.NUMERIC_PRECISION ,  
    9.  c.NUMERIC_SCALE  
    10. FROM [INFORMATION_SCHEMA].[COLUMNS] c  
    11. WHERE TABLE_NAME = 'idata'  

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

  • 相关阅读:
    iOS “请在微信客户端打开链接” UIWebview加载H5页面携带session、cookie、User-Agent信息 设置cookie、清除cookie、设置User-Agent
    iOS AR技术初体验,使用EasyAR示例程序的小白指南
    导入GPUImage,实时滤镜相机,GUPImage遇到的问题解决,_OBJC_METACLASS_$_GBGPUImageView in GBGPUImageView.o
    iOS 除去图片的白色背景(接近白色),或者其它颜色的替换,获取像素点的ARGB值
    用const取代宏定义更好的管理内存
    一些字体设计的练习
    Appium 解决锁屏截屏问题(java篇)
    解决Appium无元素可选的如何定位(java篇)
    解决Appium 抓取toast(java篇)
    Appium 解决手势密码 (java篇)
  • 原文地址:https://www.cnblogs.com/syncnavigator/p/10198282.html
Copyright © 2011-2022 走看看