数据库大师成长日记:巧用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‘

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

原文地址:https://www.cnblogs.com/syncnavigator/p/10198282.html

时间: 2024-08-26 05:53:57

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

数据库大师成长日记:巧用SQL语句,小技巧解决大问题!

朋友们,我们在写SQL脚本的时候,可能一些看起来不起眼的小问题.却让我们非常头疼.比如我们要写一个备份数据库的脚本,如果我们对服务器的硬盘分区和使用情况很了解,备份当然没有问题,但如果我们不知道服务器硬盘如何分区.每个分区还有多少空间可用的情况下,您写的备份语句可能就不好执行了. 下面,我就日常我们可能会碰到的一些"大问题",通过简单的SQL脚本进行实现. 查看硬盘分区与可用空间 这个通过调用master数据库下面的存储过程xp_fixeddrives很容易实现. EXEC maste

数据库大师成长日记:SQL Server如何防止开发人员获取敏感数据

朋友们,我们在使用SQLServer数据库的时候,数据库表的字段值都是公开的.如果您是项目负责人,知道所有实际数据无可厚非,但如果这些数据比较敏感,您并不希望开发团队的其他人员知道该怎么办呢? 在上一篇<SQL Server如何进行元数据底层加密>中,我详细说明了SQL Server数据加密用到的各种SQL语法,这一讲我们结合实例实战一下对数据库字段进行加密的方法和过程. 比如您是项目负责人,要给客户开发一个工资系统.一般企业的工资都是保密的,如果您直接把工资信息都明文放在数据库中,您的开发团

数据库大师成长日记:您最需要了解的NoSQL非关系型数据库

朋友们,我们平时使用的数据库,大多都是关系型数据库,包括MySQL.PostgreSQL.SQLServer等.关系型数据库的特点是数据的存储通过二维表格实现,将数据存储在相互独立的表格中. 近年来,随着互联网的飞速发展,数据的形态发生了很大改变,非关系型数据库NoSQL应运而生.越来越流行.NoSQL主要包括键值(Key-Value)存储数据库.列存储(Column-oriedted)数据库.面向文档(Document-Oriented)数据库.图形(Graph)数据库四种,下面介绍三款最常用

高效SQL语句(SQL Server)

以下的SQL语句以Northwind为例 1.不要再where子句中"="的左侧使用函数和表达式,因为系统无法应用函数或表达式中的索引 SELECT * FROM Customers WHERE Cast(CustomerID AS VARCHAR(20))='1' --Clustered Index Scan 全表扫描SELECT * FROM Customers WHERE CustomerID ='1' --Clustered Index Seek 索引扫描 2.只返回必要的行或

SQL语句:关于复制表结构和内容到另一张表中的SQL语句

1.复制新表结构及数据到新表create table 新表 select * from 旧表 2.只复制表结构到新表 create table 新表 select * from 旧表 where 1=2 3.复制旧表的数据到新表(假设两个表结构一样) insert into 新表 select * from 旧表 4.复制旧表的数据到新表(假设两个表结构不一样) insert into 新表(字段1,字段2,......) select 字段1, 字段2,... from 旧表 SQL语句:关于

查看SQL语句在SQL Server上的执行时间

set statistics profile onset statistics io onset statistics time ongo--begin <这里写上你的语句...>  select * from ......  --end <这里写上你的语句...> set statistics profile offset statistics io offset statistics time OFFgo --执行后查看[消息],有很清楚的执行情况. 查看SQL语句在SQL S

基于简单sql语句的sql解析原理及在大数据中的应用

李万鸿 通常sql语法解析都是以lex.yacc进行分析为基础的,是逐个字符进行分析,性能不高,如果基于没有子查询的sql语句进行解析,则速度会提高许多,在此对其原理加以说明. 一般sql语句十分复杂,包含多层嵌套,但其中有规律可循,其特点是所有的语句基本模式是一样的,即:都是SELECT  FROM  WHERE类型的简单语句,因此,可以把嵌套的语句逐条解析为这种简单语句.由于sql语句的语法是一样的,所以可以用递归的方法对语句加以解析,从而把sql语句解析为多条简单的子SQL语句.然后通过一

sql语句优化SQL Server

MS   SQL   Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)          2.I/O吞吐量小,形成了瓶颈效应.          3.没有创建计算列导致查询不优化.          4.内存不足          5.网络速度慢          6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)          7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)   

常见SQL语句和SQL基础知识

引自:http://blog.csdn.net/u012467492/article/details/46790205 SQL语句考察(一) 1.查询出每门课都大于80 分的学生姓名 name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文       76李四     数学       90王五     语文       81王五     数学       100王五     英语       90 A: selec