【整理】SQLServer查询各种数据库对象(表,索引,视图,图表,存储过程等)
首先明确数据库对象的定义:数据库对象定义数据库内容的结构。它们包含在数据库项目中,数据库项目还可以包含数据生成计划和脚本。
常见的数据库对象包括:表,索引,视图,图表,缺省值,规则,触发器,存储过程,函数等
1.sys.objects视图
数据库中创建的每一个对象都对应表中的一行,但不包括DDL触发器,查询触发器应该使用sys.triggers
常见的不同类型对象在sys.objects中的区分:
类型 | type列 | type_desc列 |
FOREIGN KEY 约束 | F | FOREIGN_KEY_CONSTRAINT |
SQL 标量函数 | FN | SQL_SCALAR_FUNCTION |
SQL 内联表值函数 | IF | SQL_INLINE_TABLE_VALUED_FUNCTION |
内部表 | IT | INTERNAL_TABLE |
SQL 存储过程 | P | SQL_STORED_PROCEDURE |
PRIMARY KEY 约束 | PK | PRIMARY_KEY_CONSTRAINT |
系统基表 | S | SYSTEM_TABLE |
SQL 表值函数 | TF | SQL_TABLE_VALUED_FUNCTION |
表(用户定义类型) | U | USER_TABLE |
UNIQUE 约束 | UQ | UNIQUE_CONSTRAINT |
视图 | V | View |
因此查询数据库中包含的对象可以直接查询sys.objects视图,比如:查询数据库中所有的视图
SELECT * FROM sys.objects WHERE type = 'U'
由于对象id在对应数据库中是唯一的,可以在查询时联结其他表或视图,比如:查询数据库中所有存储过程及其内容
SELECT O.name, M.definition FROM sys.objects O
JOIN sys.sql_modules M ON M.object_id = O.object_id
WHERE O.type = 'P'
2.其他查询方法
存储过程有单独的系统视图sys.procedures,基本等价于sys.objects WHERE type = 'P'
另外还可以执行系统sp查询存储过程:EXEC sp_stored_procedures,不同的是:
sys.procedures (或sys.objects WHERE type = 'P')只包含用户存储过程,但执行sp_stored_procedures可以查询所有种类的存储过程和除了系统函数之外的所有函数
3.sys.modules视图
为每个包含 SQL 语言定义模块的系统对象返回一行,类型为 FN、IF、P、PC、TF 和 V 的系统对象具有关联的 SQL 模块。
因此,对于这些类型的对象,可以联结sys.objects查询对象的语言定义模块,即其内容。
4.sp_helptext需要注意的
sp_helptext是使用频率非常高的系统存储过程,使用它可以快速列出指定名称存储过程或函数的内容,但是有如下缺点:
①格式化代码
②当一行长度超过一定后,分行显示
这样当修改存储过程或函数时,如果使用sp_helptext很可能导致格式错乱,对于下一次的代码阅读造成很大的麻烦。
因此,建议sp_helptext仅限于查看存储过程或函数的内容。
另外,加密的存储过程不能通过sp_helptext查询。
本文待补充
【整理】SQLServer查询各种数据库对象(表,索引,视图,图表,存储过程等)的更多相关文章
- Oracle 客户端、服务器、数据库、数据库对象(表、视图等)的关系
1.数据库服务器 所谓数据库服务器,只是在机器上安装了一个数据库管理软件,这个软件可以管理多个数据库.一般开发人员会针对每一个应用创建一个数据库 2.单实例数据库模式下的数据库服务器.数据库.数据库实 ...
- mysql 查询指定数据库所有表, 指定表所有列, 指定列所有表 所有外键及索引, 以及索引的创建和删除
查询指定 数据库 中所有 表 (指定数据库的,所有表) // 可以把 TABLE_NAME 换成 * 号, 查看更丰富的信息 SELECT TABLE_NAME FROM information_sc ...
- Sqlserver列出所有数据库名,表名,字段名
Sqlserver列出所有数据库名,表名,字段名 1.获取所有数据库名: ? 1 SELECT Name FROM Master..SysDatabases ORDER BY Name 注 ...
- SqlServer判断数据库、表、字段、存储过程、函数是否存在
原文:SqlServer判断数据库.表.字段.存储过程.函数是否存在 判断数据库是否存在 if exists (select * from sys.databases where name = '数据 ...
- HubbleDotNet 开源全文搜索数据库项目--为数据库现有表或视图建立全文索引(三) 多表关联全文索引模式
关系型数据库中,多表关联是很常见的事情,HubbleDotNet 可以对部分情况的多表关联形式建立关联的全文索引,这样用户就不需要专门建一个大表 来解决多表关联时的全文索引问题. 下面以 为数据库现有 ...
- Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)
Oracle 导出.导入某用户所有数据(包括表.视图.存储过程...)前提:在CMD 命令下 导出命令:exp 用户名/密码@数据库 owner=用户名 file=文件存储路径(如:F:\abcd.d ...
- PowerDesigner建模应用(二)逆向工程,导出PDM文件前过滤元数据(表、视图、存储过程等)
在上一篇文章<PowerDesigner建模应用(一)逆向工程,配置数据源并导出PDM文件>步骤二中导出了目标数据库对应的PDM文件, 该文件中展示出了所有表的信息与关系. 某些业务场景下 ...
- PowerDesigner应用02 逆向工程之导出PDM文件前过滤元数据(表、视图、存储过程等)
在上一篇文章<PowerDesigner应用01 逆向工程之配置数据源并导出PDM文件>步骤二中导出了目标数据库对应的PDM文件, 该文件中展示出了所有表的信息与关系. 某些业务场景下只需 ...
- 读写SQL脚本进行创建表、视图和存储过程
一.按照先创建表.视图.存储过程的顺序创建: 二.导出脚本的时候注意:保存为ANSI文本,选项中:if not exists为true,防止覆盖:包含说明性标头为false;use database为 ...
随机推荐
- 蜂窝移动网络是什么,它和 Wi-Fi 有什么区别? 蓝牙和无线有什么区别?
蜂窝移动网络是什么,它和 Wi-Fi 有什么区别? 转自知乎用户的一个回答: 原题问的是"数据流量是什么",不知道怎么又被改成"蜂窝移动网络是什么"了.说下个人 ...
- Java琐碎知识点
jps命令是JDK1.5提供的一条显示当前用户的所有java进程pid的指令,类似Linux上的ps命令简化版,Windows和linux/unix平台都可以用比较常用的参数:-q:只显示pid,不显 ...
- python中pip的使用和安装
Ubuntu下安装pip的方法 安装pip的方法: Install pip and virtualenv for Ubuntu 10.10 Maverick and newer $ sudo ...
- Java面试题之八
四十一.面向对象的特征有哪些方面 四大特征大家都知道:抽象.继承.封装.多态.这是个理解性表述题,每个人的表述方式可能都不一样.下面仅选择一种作为参考: 1.抽象: 抽象——就是忽略一个主题中与当前目 ...
- idea git 注意事项
1.使用idea进行不同分支切换的时候,一定要先将代码当前分支的代码提交(可以不push),否则当前分支未提交的代码被认为即将切换的代码,在切换过程中会产生冲突. 2.使用idea进行merge的时候 ...
- DevExpress.GridControl.gridView的一些注意
1.DevExpress控件组中的GridControl控件不能使横向滚动条有效.现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决: gridView1.Op ...
- "margin塌陷现象"div盒子嵌套盒子外边距合并现象
问题描述:原型大概是“一个div嵌套了两个 div,给main设定了background="pink" ,header1设定background=“red” .header2 设定 ...
- 关于Webapp导航设计的思考
一.马蜂窝 http://m.mafengwo.com
- java如何在一个有序的数组类插入一个数!
第一种:依次与有序数组中的每个数进行比较,然后找到位置之后,定义一个新的数组,该信数组的长度加一,再使用system.arraycopy将于数组copy到新数组!import java.util.Ar ...
- Java输入输出流(转载)
转自http://blog.csdn.net/hguisu/article/details/7418161 目录(?)[+] 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作 ...