• SqlServer 之 系统视图


    一、了解系统视图

    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。然后附加这个copy就好了。

      

          附加成功后,查看附加的数据库的视图,,这些view并不是在" 系统视图 " 文件夹下面的,而是正真的作为用户视图。

      

    2、系统view的数据源

          既然是view,其实它就是虚表,既然是虚表,那基础表在何处?来看一下我们的用户数据库。系统表 是空的。

      

          可以看到,上面的 系统基表是空的,那在这个DB中的system view从哪查找的数据?因为没看到不代表真的没有,可以用system view来祝我们一臂之力,接下来用 sys.objects 一探究竟。。。共有 45 个系统表

      

  • 相关阅读:
    聚簇索引与非聚簇索引(二级索引)的区别
    swoole介绍
    什么是mysql执行计划
    php-fpm浅析
    字段设计规范
    mysql排序规则utf8_genera_ci和utf8_bin的区别
    chrome 麦克风被禁用
    获取地址栏参数
    vue 打包去掉console debugger
    Vue less全局变量预处理加载
  • 原文地址:https://www.cnblogs.com/xinaixia/p/4218743.html
Copyright © 2020-2023  润新知