您的位置:首页 > 数据库

Bat脚本学习-1:合并Sql存储过程

2017-02-02 22:04 204 查看
@echo off&PUSHD %~DP0 &TITLE 合并存储过程
:菜单
cls
set user_input=0
mode con cols=120 lines=40
echo.
echo 请选择要合并存储过程的子系统(直接回车可以退出):
echo.
echo 输入1,合并XXX-1
echo.
echo 输入2,合并XXX-1
echo.

set /p user_input=请输入数字:
if %user_input% == 0 exit
if %user_input% == 1 goto xxx-1
if %user_input% == 2 goto xxx-2
echo 输入有误
pause
goto 菜单

:xxx-1
set filePathSrc=D:\xxx-1\开发目录\数据库脚本\存储过程
set fileMerge=D:\xxx-1\开发目录\数据库脚本\数据库更新\3.Procedure.sql
call:公共合并方法

set filePathSrc=D:\xxx-1\开发目录\数据库脚本\函数
set fileMerge=D:\xxx-1\开发目录\数据库脚本\数据库更新\4.Function.sql
call:公共合并方法

pause
goto 菜单

:xxx-2
set filePathSrc=D:\xxx-2\开发目录\数据库脚本\xxx-2库\存储过程
set fileMerge=D:\xxx-2\数据库脚本\xxx-2库\3.Procedure.sql
set sqlText=IF(DB_NAME() NOT LIKE 'XXX-2%%%%') BEGIN RAISERROR ('当前操作的数据库不是xxx-2库,脚本已取消!' , 16, 1); RETURN; END
call:公共合并方法 "%sqlText%"
pause
goto 菜单

:公共合并方法
echo 开始合并%filePathSrc%\*.sql
if exist "%fileMerge%" del "%fileMerge%"
if not "%~1"=="" echo %~1>>"%fileMerge%"
for %%f in (%filePathSrc%\*.sql) do (
echo 已添加:%%~nf%%~xf
type %%f>>"%fileMerge%"
echo.>>"%fileMerge%"
)
echo 已合并至%fileMerge%
goto:eof


花了两天鼓捣出来的bat脚本,可以合并存储过程,也学到了很多bat脚本的写法,隐去项目具体信息,精简一下放上来大家参考,脚本几个语法点:

1、上面几行是设置界面,可以设置宽高和颜色,我还是习惯黑白

2、冒号后面跟的标签点,可使用goto跳转

3、echo是显示,相当于print之类,echo.相当于换行

4、%user_input% 表示接收输入值,相当于Console.ReadLine()之类

5、pause是便于显示信息,类似Console.ReadKey()

6、set可赋值,直接用就可以,有些像js,后面的字符串不用加引号

7、call是调用函数

8、合并的存储过程前加了一句验证,使用DB_NAME()获取当前库名,避免脚本运行在其它库上。bat里给变量赋值不能换行,网上有些方法如加双引号或^之类,但我试了都不好使。好在用空格分隔的Sql脚本也可以正常执行,就是不方便阅读。

9、四个百分号%%%%是为了转义,两个%%转成%,本来两个就可以,但给函数传递参数时不知怎么回事一定要四个%才能最终转成一个%,可能是转义的转义

10、if exist XX del XX,是先删除文件

11、%~1是获取函数的第一个参数,后面的参数变化数字就行,那句判断表示如果有传参数进函数,则拼进文本的第一行

12、for循环,%%f表示循环里的局部变量,类似for(int i = 0。。。)的i

13、type %%f>> 表示把循环中的变量(本例中为相应SQL文件内容)写进指定路径的文本。>>表示追加,>表示替换

14、echo.>> 表示每个SQL文本追加后再加一个换行

15、函数结束用goto:eof

16、用goto跳转后,有些像switch,执行完会继续往下走,使用时要注意。现在很多脚本都支持goto,但都不建议使用,跳来跳去容易乱。bat我一时也没找到什么好方法,大家也都使用goto来跳转菜单。

17、bat对中文支持的很好,无论是标签还是路径使用中文都没问题

18、漏说了一个,%%~nf%%~xf,其中%%~nf表示文件名,%%~xf表示扩展名

今天打算再弄一个在文件夹里找相应规则文件名的bat脚本。比如某文件夹里都是按XXX-001.xxx命名的,从001一直到100,要找出中间有没有漏的,之前我都靠眼睛看,一个个数,现在试着用bat解决下,思路是双重循环,先循环1~100,再循环文件名,如果没找到相应的,就把当前值写到一个文本文件里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: