標籤:
原文:[SQL Server]一次執行資料夾內的.sql 指令碼
初始資料庫時,我們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
今天同事來問,一整個忘記當初怎麽串的,快筆記下來。
參考:
使用 sqlcmd 串連至 Database Engine
使用 sqlcmd 執行 Transact-SQL 指令碼檔案
Run all SQL files in a directory
SQL Server – Executing Multiple Script Files Using SQLCMD
[SQL Server]一次執行資料夾內的.sql 指令碼