Windows环境下实现批量执行Sql文件


Posted in SQL Server onOctober 05, 2021

使用场景:按文件名字正序,批量执行某文件夹下的所有sql文件,并输出日志
适合人群:实施工程师

一、使用篇

1、准备bat文件:
1.1、ExecSql.bat(执行脚本)(文件编码:ANSI,这个编码与下面提到的utf8和UTF-8都不一样,用记事本编辑默认就是这个编码,所以不一定要下notepad++)

@ECHO OFF

SET dbhost=127.0.0.1
SET dbuser=sa
SET dbpasswd=sa
SET dbName=Application

REM 以下内容不建议修改
REM 执行脚本的路径,此处为当前路径
SET sqlpath=%~dp0
REM 日志文件名
SET temp=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.log
SET logFileName=%sqlpath%%temp: =0%

::执行sql脚本
echo 开始执行sql脚本,所有日志记录于%logFileName%
for /r %%i in (*.sql) do ( echo %%i被执行 & echo ----- %%i log start ----- >> %logFileName% & sqlcmd -S %dbhost% -U %dbuser% -P %dbpasswd% -d %dbName% -i %%i -k -b -m 10 >> %logFileName% & echo ----- %%i log end ----- >> %logFileName% & @echo. >> %logFileName%)

ECHO 完成!
PAUSE
1.2、ShowOrder.bat(查看什么脚本会被执行,按什么顺序执行)(文件编码:ANSI)
@ECHO OFF
for /r %%i in (*.sql) do ( echo %%i )

ECHO 完成!
PAUSE
2、将ExecSql.bat复制到目标根目录下,文件目录结构(文件夹路径最好没有中文),如图,假设我需要执行此文件夹下所有的sql文件

Windows环境下实现批量执行Sql文件

3、【可选做】排序,如果对sql文件的执行顺序有要求的,需要对文件进行重命名,如上图所示,执行顺序为文件名字正序,建议使用“01.”这种作为文件名前缀

将ShowOrder.bat复制到目标根目录下,双击运行,查看执行顺序是否符合预期

Windows环境下实现批量执行Sql文件

4、【重要】编码转换,一般情况下.sql文件的编码都是utf8,如果.sql文件内容中,使用了中文(注释不算),则需要修改文件编码是GB2312,否则会执行错误的sql语句。

比如01.XXX.sql的编码是utf8的,但插入数据库的数据却是乱码
Windows环境下实现批量执行Sql文件

Windows环境下实现批量执行Sql文件

以下4.1和4.2择一执行

4.1、修改编码的方法为:使用Notepad打开.sql文件,ctrl+A(全选),ctrl+C(复制),点击Notepad“编码”->“编码字符集”->“中文”->“GB2312”,应该会出现一个“无法恢复警告”,点“是”,ctrl+A(全选),ctrl+V(粘贴),最后保存

4.2、使用工具(EncodingConverter)批量修改:下载好工具后解压即可运行,双击BatchConvertor.exe,如下图所示设置

Windows环境下实现批量执行Sql文件

转化完成后会再执行会得到正确的中文

Windows环境下实现批量执行Sql文件

5、修改bat文件,用Notepad++或别的编辑器打开bat文件,修改ExecSql.bat中的数据库连接相关信息,只改跟连接数据库相关的4个变量即可,其他不需要修改,改完后保存

Windows环境下实现批量执行Sql文件

6、双击bat文件,会有如图所示的输出

Windows环境下实现批量执行Sql文件

7、查看日志,检查每一个.log文件,没有消息就是好消息,一个执行正确脚本的.log文件一般长这样

Windows环境下实现批量执行Sql文件

有错误也会反馈出来,如脚本再执行一次就会报错

Windows环境下实现批量执行Sql文件

特别提醒:此bat文件会检查当前文件夹下所有的.sql文件并执行,再次执行bat时需要删掉一些不用再次执行的.sql文件

二、原理篇

sqlcmd和osql两种命令都可以执行sql文件,两者参数配置项几乎完全一样,这里选用sqlcmd是出于这个的日志输出比较整洁,且微软打算在未来SqlServer中删除osql(不再支持)。两种命令都可以在cmd中使用XXX/?来查询帮助

sqlcmd的官方文档:https://docs.microsoft.com/zh-cn/sql/tools/sqlcmd-utility?view=sql-server-ver15

Windows环境下实现批量执行Sql文件

osql的官方文档:https://docs.microsoft.com/zh-cn/sql/tools/osql-utility?view=sql-server-ver15

Windows环境下实现批量执行Sql文件

到此这篇关于Windows环境下实现批量执行Sql文件的文章就介绍到这了,更多相关Windows批量执行Sql文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!
SQL Server 相关文章推荐
2021-4-5课程——SQL Server查询【3】
Apr 05 SQL Server
SQL Server数据定义——模式与基本表操作
Apr 05 SQL Server
【HBU】数据库第四周 单表查询
Apr 05 SQL Server
SqlServer: 如何更改表的文件组?(进而改变存储位置)
Apr 05 SQL Server
SQLServer中JSON文档型数据的查询问题解决
Jun 27 SQL Server
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
Jun 30 SQL Server
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
Jun 30 SQL Server
SQLServer之常用函数总结详解
Aug 30 SQL Server
Windows环境下实现批量执行Sql文件
Oct 05 SQL Server
SQL中的三种去重方法小结
Nov 01 SQL Server
SQL Server删除表中的重复数据
May 25 SQL Server
SQL Server数据库备份和恢复数据库的全过程
Jun 14 SQL Server
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
Sep 04 #SQL Server
sql server删除前1000行数据的方法实例
Aug 30 #SQL Server
SQLServer之常用函数总结详解
Aug 30 #SQL Server
SQL写法--行行比较
Aug 23 #SQL Server
SQL语句中JOIN的用法场景分析
sql通过日期判断年龄函数的示例代码
Jul 16 #SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
You might like
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
Promise扫盲贴
2019/06/24 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
荷兰电脑专场:Paradigit
2018/05/05 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
应届生服务员求职信
2013/10/31 职场文书
自我评价优秀范文分享
2013/11/30 职场文书
办公室内勤岗位职责范本
2013/12/09 职场文书
会计专业的自荐信
2013/12/12 职场文书
20年同学聚会感言
2014/02/03 职场文书
总裁助理岗位职责
2014/02/17 职场文书
安全教育感言
2014/03/04 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
老人节标语大全
2014/10/08 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书