初始资料库时,我们Developers们会准备很多.sql指令码来建立资料表、检视甚至初始资料,那麽要怎麽一次执行资料夹内的*.sql或是指定的几个.sql指令码?
来节省一点点初始化资料库的作业时间。
好在我们有MSDN使用sqlcmd 执行指令码的范例:
sqlcmd -S myServer\instanceName -i C:\myScript.sql
如果只有几个,串成bat档或是powershell也很方便,但如果很多个,
一来要重复写很多次,二来也没办法Handle到指定资料夹内的.sql都要执行的需求
很快的从网路找到答案,然後我们改写了语法,并且把执行的log写到指定的Log档名中。
1.执行指定资料夹内的.sql
@echo offrem 资料库IP\资料库执行个体名称set dbIp=stanley\SQL2014rem 资料库名称set dbName=TSQL2014rem 登入帐号set dbUsrAcc=ImDeveloperrem 使用者密码set dbUsrPwd=Passw0rdrem 整理完毕的SQL指令集资料夹位置set batchFilePath="C:\TestDB\db_script\folder"rem 程式开始执行cd %batchFilePath%FOR /f %%i IN ('DIR *.Sql /B') do call :RunScript %%iGOTO :END:RunScriptEcho Executing %1sqlcmd -S %dbIp% -d %dbName% -U %dbUsrAcc% -P %dbUsrPwd% -i %1 >>view.logEcho Completed %1:END
2.透过清单.sql档案执行
list.sql 清单(sql01~06和bat档同目录)
:r .\sql01.sql :r .\sql02.sql :r .\sql03.sql :r .\sql04.sql :r .\sql05.sql :r C:\testDB\db_script\sql06.sql
批次档内容
@echo offrem 资料库IP\资料库执行个体名称set dbIp=stanley\SQL2014rem 资料库名称set dbName=TSQL2014rem 登入帐号set dbUsrAcc=ImDeveloperrem 使用者密码set dbUsrPwd=Passw0rdrem 清单.SQL档放置路径set dbSqlFilePath="C:\test\db_script\list.sql"rem 程式开始执行cd %batchFilePath%sqlcmd -S %dbIp% -d %dbName% -U %dbUsrAcc% -P %dbUsrPwd% -i %dbSqlFilePath% >view.logPAUSE@echo on
今天同事来问,一整个忘记当初怎麽串的,快笔记下来。
参考: