博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

doc2sql

Posted on 2006-08-30 18:38  liufu627  阅读(182)  评论(0)    收藏  举报

最近,坐在旁边的同事在做一个项目,今天正好要建数据库。
刚好转身看见他正在根据WORD文档在企业管理器里建表,我吓了一跳:“上面没有用一些数据库建模工具吗?”, “没有啊,数据字典全在这里面啰”,他一边说一边忙着,用鼠标点啊,接键盘啊,忙得不亦乐呼。

“反正现在也没什么事,看想想有什么更好的方法来解决这个问题,不要太麻烦,要让这个WORD文档变成SQL语句”,心思一来,说干就干,连忙叫同事把这个文档发过来,我研究一下。

WORD样式的数据字典一般都是以表格的形式存放,再看看表格里的格式都是一样的:第一列是字段名,第二列是数据类型,第三列是主键等等。哈哈,有戏阿。首先选择这个表,复制内容到EXCEL里,WORD表格变成了EXCEL表格,心中一阵狂喜,“小样,不信治不了你。”
  
每一行都是一个字段的相关内容,那么生成出来的东西肯定也只能是关于一个字段的东西啦,不然难度增加了,同事在旁边看见呢,搞不定面子上挂不住啊。。。每一列又是一个字段的相关属性,那么只有将每一个单元格变成SQL元素,然后将一行的单元格都连接起来,那么就是一个字段的SQL啦,再然后那么一拉,就把整个表格的SQL都生成了,胜利已经不远啰,呵呵地偷笑了一下。

整个思路已经确定下来了,现在正常开始干活了。
由于不一定每一行都是跟字段的生成有关,可能是其它一些附加信息,所以还是得判断一下。这个自然而然就想到了IF啦。查找一下IF函数,果然很简单,搞定。

主键列的话,一般都是PK二字,有可能不一定写的这么公正,唉,没办法啊,上面也太。。。
那么首先将它转换成大写形式吧,再用IF判断一下变成PRIMARY KEY或者其它的不就行了么?其它的以此类推噢,哈哈,洗好脖子等着吧。

每部分的测试完毕,现在把这个函数整合起来,经过一些磕磕碰碰,终于全部搞定了,选择这列,复制,打开记事本,粘贴一下,删除第一个字段前面多余的逗号,再全部复制一下,放到查询分析器里一运行,妈的,太爽了,全部已经生成啰,跟需要的效果一模一样,叫来同事,吹嘘了一番,然后再他的称赞声中将下的EXCEL 函数发过去了:

=IF(LEN(A2)<>0,CONCATENATE(",","[",A2,"]"," ",B2," ",IF(UPPER(C2)=T("PK"),"primary key ","")," ",IF(LEN(D2)<>0,CONCATENATE(" default(",D2,")"),"")," ",IF(UPPER(E2)=T("Y")," NULL","NOT NULL"),""),"")

这只是一个抛砖引玉啦,希望大家在遇到这种重复劳动的时候,想想有没有更好的方法来解决问题,我认为程序员的更重要的作用就是将重复劳动让电脑来完成,自己写一个模板就行了。

当然这只是耍了一下小聪明而已,如果数据库建模用软件来做的话,根本就不会有这种小聪明的存在。
问题是做事情都那么科学那么正规的公司又在哪里啊,中国太少啦!
唉。。。