Sql Server之旅——第一站 那些给我们带来福利的系统视图
本来想这个系列写点什么好呢,后来想想大家作为程序员,用的最多的莫过于数据库了,但是事实上很多像我这样工作在一线的码农,对sql
都一知半解,别谈优化和对数据库底层的认识了,我也是这样。。。
一:那些系统视图
1. 系统视图是干什么呢?
从名字上看就知道,系统视图嘛?猜的不错的话,就是存放一些sqlserver系统的一些信息,很好,恭喜你,答对了。
2. 都定义在哪呢?
为了让你眼见为实,下面截图看看,从截图中你可以看到,不管是“系统数据库”还是“用户数据库”都是有这些系统视图的,而且一眼扫下去发
现连名字都一样。


3.看看这些系统视图都能带给我什么福利?
Q1:我在维护一个系统的时候,我只知道有一个数据库中,有一个表的字段叫 “state”,但我忘了是定义在那张表中?我该如
何找出来?
A1: 这个简单,在sqlserver里面提供了一个系统视图叫“INFORMATION_SCHEMA.COLUMNS”,下面我们截图看看。

从这个系统视图名字中的这个SCHEMA这个单词可知,原来是一个保存表架构的视图,而且还有这个字段的“排位”,“默认值”这些特性,泥煤,
是不是有一种很爽的感觉???
Q2:我在C#代码中看到了一个存储过程名"CategoryInsert",我想看它的源码,但是我的table中存储过程有几千个,总不能让我
一个个的去找吧,,,拜托在系统视图中可有快捷的方法查看?
A2:so easy。。。告诉你吧,只有你想不到的,没有系统视图做不到,不就一个简简单单的看存储过程代码么?
sys.sql_modules就可以帮你实现。

Q3:这种方法好是好,但是copy的definition字段是没有格式化的。。。。大哥,上千行的sql哦。。。我特别想格式化的输
出怎么办呀?谢谢了。
A3:确实如你所说,格式化输出的话,系统View只能帮你到这了,不过天无绝人之路,你可以使用系统存储过程,里面有一个
神奇的sp_helptext,可以祝你实现梦想,不用谢。

二:对系统视图的一些思考
在上面的代码中,我演示了两个系统view,一个proc给我们带来的福利,那么仔细看一看,你就会有两个疑惑。。。。
1:系统View在哪定义的?
这个问题问的真好,从文章开头我们就知道,我的用户库MYPETSHOP是有很多系统view的,但是我真的没有定义这些view呀,老天可以
给我作证,那问题就很神秘了,system view到底从何而来?这个问题你也只有问sqlserver团队了,他们将system view都放入了一个隐藏
的resource数据库,那这个数据库在哪呢?我给你找到。

找到了之后,我现在继续附加进来,如果你够聪明的话,你不能直接加载它,否则会报进程正在使用中,原因我想你也知道。

解决方法也很简单,我们做一份copy到E盘。然后附加这个copy就好了。

既然附加进来了,我现在的感觉就是迫不及待的去看一看,细心的你通过下面的截图,我想你应该明白了些什么,这些view并不是在”系统视图“
文件夹下面的,而是正真的作为用户视图。。。对不对。。。

2:系统view的数据源在何处?
这个也是很经典的问题,既然是view,我想大家都明白,其实它就是虚表的意思,既然是虚表,那基础表在何处?带着这个问题我来翻一下
我的MYPETSHOP数据库。

可以看到,上面的系统基表空空如也,黄鹤一去不复返,白云千载空悠悠。。。那更大的疑问来了,如果连基础表都没有,那在这个DB中的
system view到底是查谁呢?这不是大忽悠么???但是事实是真的没有吗?因为你没看到不代表真的没有,可以继续用system view来祝我
们一臂之力,接下来用sys.objects一探究竟。。。

好了,大概就说这么多了,时候不早了,洗洗睡了。。。
Sql Server之旅——第一站 那些给我们带来福利的系统视图的更多相关文章
- Sql Server之旅——第九站 看公司这些DBA们设计的这些复合索引
这一篇再说下索引的最后一个主题,索引覆盖,当然学习比较好的捷径是看看那些大师们设计的索引,看从中能提取些什么营养的东西,下面我们看 看数据库中一个核心的Orders表. 一:查看表的架构 <1& ...
- Sql Server之旅——第二站 理解万恶的表扫描
很久以前我们在写sql的时候,最怕的一件事情就是sql莫名奇妙的超级慢,慢的是撸一管子回来,那个小球还在一直转...这个着急也只有当事人才 明白,后来听说有个什么“评估执行计划“,后来的后来才明白应该 ...
- Sql Server之旅——第五站 确实不得不说的DBCC命令
原文:Sql Server之旅--第五站 确实不得不说的DBCC命令 今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好 ...
- (转)Sql Server之旅——第八站 复合索引和include索引到底有多大区别?
索引和锁,这两个主题对我们开发工程师来说,非常的重要...只有理解了这两个主题,我们才能写出高质量的sql语句,在之前的博客中,我所说的 索引都是单列索引...当然数据库不可能只认单列索引,还有我这篇 ...
- 从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
随着业务发展,公司需要提高数据安全与性能需求,所以需要对新技术预研(先采坑),做技术积累: 了解相关AlwaysOn 故障转移集群(热备),数据路由(ICX),Moebius(莫比斯数据路由) 决定测 ...
- 程序员眼中的 SQL Server-非聚集索引能给我们带来什么?
写在前面 最近在做的一个项目,页面访问的时候很慢(大概几秒钟的样子),然后用日志记录的方式,来排查这个问题,最后发现是 Entity Framework 初始化的一个坑(大概要花 6-7 秒),详见: ...
- SQL server学习(四)T-SQL编程之事务、索引和视图
今天来分享下T-SQL高级编程中的事务.索引.视图,可以和之前的SQL server系列文章结合起来. 一.事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个 ...
- Sql Server:创建用户并指定该用户只能看指定的视图,除此之外的都不让查看
1,在sql server中选择好要操作的数据库 2,--当前数据库创建角色 exec sp_addrole 'seeview' --创建了一个数据库角色,名称为:[seeview] 3,- ...
- Sql Server之旅——第十二站 sqltext的参数化处理
说到sql的参数化处理,我也是醉了,因为sql引擎真的是一个无比强大的系统,我们平时做系统的时候都会加上缓存,我想如果没有缓存,就不会有什么 大网站能跑的起来,而且大公司一般会在一个东西上做的比较用心 ...
随机推荐
- CodeSnippet.info整体技术构架
CodeSnippet.info整体架构 服务器端 Asp.NET MVC5 考察过MVC6,但是现在MVC6还不成熟,技术上不稳定,很多资料也比较少. 所以网站暂时使用MVC5.当然网站的大部分业务 ...
- Hello, Android 快速入门
Hello, Android Android 开发与 Xamarin 简介 在这两节指南中,我们将 (使用 Xamarin Studio或 Visual Studio)建立我们的第一个 Xamarin ...
- Eclipse设置风格
如果觉得Eclipse的颜色太刺眼,可以修改背景与字体颜色,方法如下: (1)到http://eclipsecolorthemes.org/下载主题文件,可以选择xml文件或者epf文件: (2)Ec ...
- 泛函编程(4)-深入Scala函数类
既然是泛函编程,多了解一下函数自然是免不了的了: 方法(Method)不等于函数(Function) 方法不是函数但可以转化成函数:可以手工转换或者由编译器(compiler)在适当的情况下自动转换. ...
- UVA 253 Cube painting
大致题意:有三种颜色,一个立方体6面都可以涂一种颜色.现在给出两个每个面都涂好颜色的立方体,判断这两个立方体通过旋转是否相等. 立方体的旋转出来的结果有很多,首先可以0,1,2,3,4,5(顺序是:上 ...
- ANDROID学习书单
Skip to content PersonalOpen sourceBusinessExplore Sign upSign in PricingBlogSupport This reposito ...
- sublime text之sublimeCodeIntel 的配置
sublimeCodeIntel 的配置 智能提示插件,这个插件的智能提示功能非常强大,可以自定义提示的内容库,我的Python智能提示设置(配置文件路径为packages\SublimeCodeIn ...
- java 多态奇怪现象,子类还没有构造完成就开始干活了,谁来帮我解释?
java代码: package test.extend; public class Base { public Base(){ System.out.println("基类构造") ...
- js获取本机的外网/广域网ip地址
完整源代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- 新建WEB前端开发技术交流群---期待你的加入
这几天创建了一个前端开发的技术交流群,面向的对象主要包括正在学习前端开发的和即将步入前端开发行列的小伙伴儿,主要是为大家提供一个共同学习,共同进步的开放平台.无论你现在是在自学中,还是在培训中,甚至是 ...