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 ] 计算N个月前,N个月后的方法 #1. 计算N个月前的日期 #2. 计算N个月后的日期 #3. 月末最后一天的情况(计算从日数多的月到日数较少的月) #4. 月末最后一天的情况(计算从日数少的月到日数较多的月)
【SQL Server】数据库开发指南(三)面向数据分析的 T-SQL 编程技巧与实践 T-SQL 指的是 Transact-SQL,是一种针对 Microsoft SQL Server 数据库系统的 SQL 方言。T-SQL 扩展了标准 SQL 语言,提供了更多的功能和特性,包括事务处理、错误处理、游标处理、动态 SQL、存储过程、触发器、用户定义函数等等。
相关文章
- SQL Server中将数据导出为XML和Json方法分享
- sql语句优化之SQL Server(详细整理)
- 在SQL Server中查询资料库的TABLE数量与名称的sql语句
- 清除SQL Server数据库日志(ldf文件)的方法汇总
- SQL SERVER 分组求和sql语句
- 轻松掌握:使用SQL Server执行SQL脚本(sqlserver执行sql脚本)
- Oracle删除表: 使用SQL语句(oracle删除表sql)
- 禁止使用SQL Server系统(禁止sqlserver)
- 使用SQL Server构建强大的文献服务系统(文献sqlserver)
- 嵌入式Microsoft SQL Server:智慧核心IT系统(嵌入式mssql)
- 数据库如何有效压缩SQL Server数据库(压缩sqlserver)
- 初识SQL Server:为用户带来新的信息处理时代(初识SQLServer)
- 在Windows XP系统下安装Microsoft SQL Server(xp下安装mssql)
- SQL Server让马晓梅展现优雅的编程风采(sqlserver马晓梅)
- SQL Server中的锁分类机制(sqlserver锁分类)
- 教程深入浅出:SQL Server视频教程(sqlserver 视频)
- 安全SQL Server账户安全:重要性不容忽视(sqlserver的账户)
- SQL Server:可靠、高效和易用的数据库解决方案(sqlserver的好处)
- SQL Server中布尔型数据的使用及其优势(sqlserver布尔型)
- 系统SQL Server嵌入式系统:实现数据极致优化(sqlserver嵌入式)
- 式SQL Server嵌入式系统开发实践(sqlserver嵌入)
- 备份SQL Server 周日定期备份的重要性(sqlserver 周几)
- 善用SQL Server右下角之窍门(sqlserver右下角)
- sql探索SQL Server:前六条SQL语句(sqlserver前六条)
- 第二SQL Server:倒数第二把钥匙成就质的飞跃(sqlserver 倒数)
- 使用SQL Server打造稳定可靠的主机系统(sqlserver主机)
- oerience给领导造福:深入提升SQL Server使用经验(sqlserver ex)
- Linux系统下执行SQL脚本文件的技巧(linux执行sql文件)
- MySQL SQL 平方详解 常见方法与实现方式(mysql中sql中平方)