Sql Server之旅——第一站 那些给我们带来福利的系统视图

来源:互联网 发布:大连淘宝客服招聘 双休 编辑:程序博客网 时间:2024/04/28 00:47

 本来想这个系列写点什么好呢,后来想想大家作为程序员,用的最多的莫过于数据库了,但是事实上很多像我这样工作在一线的码农,对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
好文要顶 关注我 收藏该文  
一线码农
关注 - 56
粉丝 - 6490
荣誉:推荐博客
+加关注
37
0
关注我
« 上一篇:Javascript之旅——终点站:困惑的settimeout
» 下一篇:Sql Server之旅——第二站 理解万恶的表扫描
posted @ 2015-01-12 00:24 一线码农 阅读(5536) 评论(30) 编辑 收藏

  
#1楼2015-01-12 01:35 下个路口  
这个系列好 加油 (来自博客园v3.0.1)
支持(0)反对(0)
  
#2楼2015-01-12 07:48 zhangjf_兔子  
这个系列得好好写写
支持(0)反对(0)
  
#3楼2015-01-12 08:32 KyrieYang  
有图有真相 一线黄越来越写得好了
支持(0)反对(0)
  
#4楼2015-01-12 10:26 花儿笑弯了腰  
这文章明显是在拉客的啊,哈哈。
支持(0)反对(0)
  
#5楼2015-01-12 10:26 李大菜鸟  
平时就知道用,还真没仔细研究过。 赞!
支持(0)反对(0)
  
#6楼[楼主2015-01-12 11:37 一线码农  
@ 下个路口
谢谢关注
支持(0)反对(0)
  
#7楼[楼主2015-01-12 11:38 一线码农  
@ zhangjf_兔子
是的,有这个必要。
支持(0)反对(0)
  
#8楼[楼主2015-01-12 11:38 一线码农  
@ bworling
群里的那个谁?
支持(0)反对(0)
  
#9楼[楼主2015-01-12 11:38 一线码农  
@ 花儿笑弯了腰
不拉客了。
支持(0)反对(0)
  
#10楼[楼主2015-01-12 11:38 一线码农  
@ 李大菜鸟
平时多考虑下就好了~
支持(0)反对(0)
  
#11楼2015-01-12 13:43 爱你不打烊  
关注下,平时都没有注意过那些系统表们。。。
支持(0)反对(0)
  
#12楼[楼主2015-01-12 13:44 一线码农  
@ 爱你不打烊
有疑惑了就可以关注下~
支持(0)反对(0)
  
#13楼2015-01-12 13:47 堕落魂伤  
不错不错!!!终于盼来大神关于SQL SERVER方面的文章!!!以解我多年的疑惑!!
支持(0)反对(0)
  
#14楼2015-01-12 13:49 宝児  
有图有真相 一线黄越来越写得好了
支持(0)反对(0)
  
#15楼2015-01-12 13:52 mounting  
有图有真相,一线黄 现在动态图越来越少了
支持(0)反对(0)
  
#16楼[楼主2015-01-12 13:54 一线码农  
@ 堕落魂伤
言重了吧。。。
支持(0)反对(0)
  
#17楼[楼主2015-01-12 13:55 一线码农  
@ 宝児
谢谢支持。
支持(0)反对(0)
  
#18楼2015-01-12 13:57 搁浅拾贝  
博主博爱啊!谢谢!
支持(0)反对(0)
  
#19楼[楼主2015-01-12 13:58 一线码农  
@ mounting
越来越少了?这个到没有关注变迁历史,谢谢提醒。
支持(0)反对(0)
  
#20楼2015-01-12 14:17 起个昵称真难  
涨姿势了。。。。。。。。。。。。
支持(0)反对(0)
  
#21楼2015-01-12 14:44 钻葛格  
非常喜欢楼主的文风,老早就偷偷关注了~感谢楼主分享,有空还写啊~
支持(0)反对(0)
  
#22楼[楼主2015-01-12 15:15 一线码农  
@ 钻葛格
过奖了,下篇很快跟进~
支持(0)反对(0)
  
#23楼[楼主2015-01-12 15:15 一线码农  
@ 起个昵称真难
会多少姿势了~
支持(0)反对(0)
  
#24楼[楼主2015-01-12 15:15 一线码农  
@ 搁浅拾贝
感谢关注~
支持(0)反对(0)
  
#25楼2015-01-12 15:49 金色海洋(jyk)阳光男孩  
挺好挺好,以前也没注意。
支持(0)反对(0)
  
#26楼2015-01-12 17:12 醉心  
相当期待这个系列!
支持(0)反对(0)
  
#27楼2015-01-12 17:47 剑走江湖  
挺好的,sql server 提供了很多的类型的试图:目录视图、兼容性视图、信息架构视图、复制视图、动态管理视图和函数以及数据层应用程序视图。
支持(0)反对(0)
  
#28楼2015-01-12 18:30 Wackysoft  
在查看存储过程那块有个简单的方法:
sp_helptext 存储过程名
就可以直接查看存储过程的内容
支持(0)反对(0)
  
#29楼2015-01-13 09:58 shoupifeng  
什么时候出第二篇啊,看完有点期待啊
支持(0)反对(0)
  
#30楼2015-01-29 10:25 kuangkro  
不得不赞一个
0 0
原创粉丝点击