我对使用 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]
)
)