批处理实现MS SQL Server数据记录删除
大三就开始给一家工厂兼职做软件维护,昨天那工厂提出了一个需求:存入数据库中的条形码记录有时候出现周期重复,给后面的数据存入带来麻烦,需要给原有软件增加一个可以批量删除某一段时间内所有记录的功能。
看了看数据库,发现每条数据记录都有存入时间的字段,问题变得很好解决。又考虑到原有的软件过于庞大复杂,而且在生产线上处于重要位置,工厂又是二十四小时不间断生产的,在原有软件基础上加代码,一方面软件是用delphi写的,基本上每次都是临时抱佛脚看看书才知道语法怎么样;另一方面原有软件不是我开发的,注释写得也不怎么样,搞不好不小心哪里敲多了个字符,软件更新后跑不起来,问题就大了。所以另外写一个软件实现需求是个明智的选择。
事实上我最熟悉的是ASP,考虑到工厂那台机器都不知道有没ASP的环境,只好作罢。用ASP.NET做个简单的窗体还是可以的,又想起重装系统后还没安装Microsoft Visual Studio,鉴于现在不当码农了,安装一个这么大的东西显然很浪费我的硬盘空间,还是算了。其实JAVA也是个选择,甚至大学期间我还上了一学期的课,可恨的是万恶的手枪哥在我最引以为豪的编程课程上居然只给了我七十多分(要知道这个分数比我整个大学的平均分还要低很多),这导致我在厌恶手枪哥的同时间接地厌恶起了JAVA。
一番思索衡量之下,觉得就这么一个小功能,用那些高级语言写成一个软件,显然是不划算的,于是自然而然想到了批处理,百度了一下,发现还真有批处理操作数据库的典范。这不得不感谢百度知道。
代码是这样的:
osql -S ServerName -U user -P password -Q "DELETE FROM Table_Name (Field_Name BETWEEN CONVERT(DATETIME,'%startdate%',120) AND CONVERT(DATETIME,'%enddate%',120))"
osql工具是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件。——百度百科
想了解更多的话可以在CMD里面键入 osql /? 看看。
当然,用户需要能够自己设定所要删除记录的时间范围,所以要能接受用户的输入,代码大概是这样的:
echo 开始运行:
echo 输入开始时间(如2012-1-10),以回车结束
set /p startdate=
搞定,运行起来是这样的:
了解更多批处理知识,可以访问百度百科——真的很有用。我花了两个多钟头看完,修改了一个demo,做成一个答题的——软件(能叫软件吗?),拿来给大家玩玩。
ps:本来最后想shutdown -r,关掉你的电脑的,想想还是算了,万一你有文档没保存,我不是成了千古罪人。。