SQL Server管理员不易养成的好习惯

网络整理 - 07-27

一、开发初衷

相信大家在平时写SQL语句的时候,为了节省时间,都不太喜欢把小指放到Shift键上打出关键字的大写形式,比如建数据库,直接就create database...了,而不是CREATE DATABASE,反正SQL SERVER都可以执行语句,所以也就无所谓代码的效果了。

的确如此,但是编程都有规范一说,在SQL的编写中,将关键字大写就是一个规范,所以如果有这样的工具能够方便象我也是这样的懒人,批量将关键字替换成大写那就好了,不过饭来张口、衣来伸手可不是什么好习惯,所以还是DIY吧。。。

二、开发思路

建立Winform应用程序,依据需求此工具需要实现三个方面:

1、打开对话框——选择要处理的SQL文件路径;

2、保存对话框——选择处理完成后输出文件的路径;

3、核心功能——用正则表达式查找SQL文件中的关键字,如有匹配则将其转换为大写。

三、开发过程

俗话说:计划赶不上变化。本来计划一两个小时就能够搞定,但是还是足足折腾了一个下午,实在有些汗颜,下面就详细叙述一下过程吧:

1、搜集SQL关键字

要说SQL关键字,除了大家常见的CRUD相关的语句,还有FUNCTION、CURSOR、PROCEDURE、系统内置VARIABLE、VIEW、SCHEMA等等等等,总之一大堆,而且貌似也超出关键字的范畴了,要想完全搞定这么多东西,俺实在只能说无能为力了,所以我只搜集了大家平时经常用到的一些关键字,在下面的代码中会看到。

PS:当然如果园子里哪位能够做出一个覆盖所有SQL那样强大的来,小弟一定前往拜读。

2、SQL文件语句的遍历

不像ORACLE里的SQL PLUS那样难用的东西(主要是俺太菜了,经常出纰漏,很难一下就写对SQL),在SQL SERVER中SQL语句可以上下键随意更改内容或格式,而且语句也不用强制分号作为结尾,所以复杂的时候几行甚至十几行才是一个完整的SQL语句,所以一开始我就尝试从头到尾遍历整个文件貌似有些不太现实,最后的方案是采用了按行划分,以一行为一个数组进行处理,代码如下: 

3、现在依然不能急着处理strRow数组中的每一个元素,因为元素中有可能会出现"  create       database   "这样的情况,即关键字两侧有一个或多个空格字符,如果不进行统一处理,会给后面的替换带来很大的麻烦,所以这里再用一个正则表达式,使空格通通变成一个,随后再以空格作为分割符,这样才算得到了我们真正需要进行匹配替换操作的数组:

4、下面循环遍历strRowDetail数组中的每一项:

为什么暂时省略了后面的代码呢,因为这样写考虑是不周全的,试想如果一个SQL语句如:

这样关键字一个是一个的话,那匹配起来自然没有问题,但很多时候事情并没有那么简单,有些SQL语句包含了很多关键字。

最典型的就是日期类型的操作,比如:

5、最后用StreamWriter将得到的内容写入文件,这里除了编码问题貌似也没啥好说的了: