我對使用MSQL執行SQL沒有任何瞭解。你必須弄清楚如何使用爲MSQL提供的任何命令行實用程序來針對正確的數據庫運行每個腳本。
我可以幫助你一個批處理文件,將以正確的順序排序SQL文件,並解析出數據庫的名稱。
如果序號爲零,前綴爲固定寬度,則該作業在批處理中要簡單得多。我假設可以重命名這些文件,所以這個解決方案就是這樣做的。
我還假定你永遠不會有超過999個文件來處理。代碼可以很容易地修改以處理更多。
如果任何文件名包含!
字符,則必須進行一些更改,因爲延遲擴展會破壞FOR變量的擴展。但這是一個不太可能的問題。
@echo off
setlocal enableDelayedExpansion
:: Change the definition to point to the folder that contains the scripts
set "folder=sqlCodeFolder"
:: The mask will only match the pattern that you indicated in your question
set "mask=[*] [*]*.sql"
:: Rename the .sql files so that the sequence numbers are zero prefixed
:: to width of 3. This enables the default alpha sort of the directory to be
:: in the proper sequence
for /f "tokens=1* delims=[]" %%A in ('dir /b "%folder%\%mask%"') do (
set seq=00%%A
ren "%folder%\[%%A]%%B" "[!seq:~-3!]%%B"
)
::Process the renamed files in order
for %%F in ("%folder%\%mask%") do (
for /f "tokens=2 delims=[] " %%D in ("%%~nF") do (
rem %%F contains the full path to the sql file
rem %%D contains the name of the database, without enclosing []
rem Replace the echo line below with the proper command to run your script
echo run %%F against database [%%D]
)
)
我假設這是Windows,因爲你說「批處理文件」。如果您使用更好的腳本語言(例如通過Windows Scripting主機的VBscript或Javascript或PowerShell),則可以減少挫折時間。有了其中之一,它可能或多或少是微不足道的(讀取文件名,解析它們並構建您的命令)。 – theglauber
我肯定會使用VBScript這一個。使用FileSystemObject獲取腳本列表。 – Ben
什麼是'MSQL'? 'MS SQL'或'MySQL'? –