初始資料庫時,我們Developers們會準備很多.sql指令碼來建立資料表、檢視甚至初始資料,那麼要怎麼一次執行資料夾內的*.sql或是指定的幾個.sql指令碼?
來節省一點點初始化資料庫的作業時間。
好在我們有MSDN使用sqlcmd 執行指令碼的範例:
sqlcmd -S myServer\instanceName -i C:\myScript.sql
如果只有幾個,串成bat檔或是powershell也很方便,但如果很多個,
一來要重複寫很多次,二來也沒辦法Handle到指定資料夾內的.sql都要執行的需求
很快的從網路找到答案,然後我們改寫了語法,並且把執行的log寫到指定的Log檔名中。
1.執行指定資料夾內的.sql
@echo off
rem 資料庫IP\資料庫執行個體名稱
set dbIp=stanley\SQL2014
rem 資料庫名稱
set dbName=TSQL2014
rem 登入帳號
set dbUsrAcc=ImDeveloper
rem 使用者密碼
set dbUsrPwd=Passw0rd
rem 整理完畢的SQL指令集資料夾位置
set batchFilePath="C:\TestDB\db_script\folder"
rem 程式開始執行
cd %batchFilePath%
FOR /f %%i IN ('DIR *.Sql /B') do call :RunScript %%i
GOTO :END
:RunScript
Echo Executing %1
sqlcmd -S %dbIp% -d %dbName% -U %dbUsrAcc% -P %dbUsrPwd% -i %1 >>view.log
Echo 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 off
rem 資料庫IP\資料庫執行個體名稱
set dbIp=stanley\SQL2014
rem 資料庫名稱
set dbName=TSQL2014
rem 登入帳號
set dbUsrAcc=ImDeveloper
rem 使用者密碼
set dbUsrPwd=Passw0rd
rem 清單.SQL檔放置路徑
set dbSqlFilePath="C:\test\db_script\list.sql"
rem 程式開始執行
cd %batchFilePath%
sqlcmd -S %dbIp% -d %dbName% -U %dbUsrAcc% -P %dbUsrPwd% -i %dbSqlFilePath% >view.log
PAUSE
@echo on
今天同事來問,一整個忘記當初怎麼串的,快筆記下來。
參考:
使用 sqlcmd 執行 Transact-SQL 指令碼檔案
Run all SQL files in a directory
SQL Server – Executing Multiple Script Files Using SQLCMD