我需要一个 DOS 命令或一个批处理 (.bat) 文件,我可以执行它来运行目录及其子目录中的所有 *.sql 脚本。解决方案是什么?
以下内容将帮助您开始
for /r %f in (*.sql) do echo %f
从命令行运行,将打印当前目录和所有子目录中所有 SQL 文件的名称。
然后用
sqlcmd <connection args> -i%f
替换 echo %f
来执行脚本。
希望这有帮助。
给你。该批处理文件将执行目录及其子目录中的所有sql文件。它还会创建一个包含结果的output.txt 文件,以便您可以看到错误和其他内容。关于批处理文件的一些注释:
确保 [YourPath] 末尾有一个“\”
设置数据库=[您的数据库]
SET ScriptsPath=[你的路径]
SET ServerInstance=[您的服务器名称\您的实例名称]
如果存在“%ScriptsPath%output.txt”del“%ScriptsPath%output.txt”
输入 NUL >“%ScriptsPath%output.txt”
FOR /R "%ScriptsPath%" %%G IN (*.sql) DO (
sqlcmd -d %Database% -S %ServerInstance% -i "%%G" -o "%%G.txt"
回声................................................ ........................................ >>“%ScriptsPath%output.txt”
echo 执行:“%%G”>>“%ScriptsPath%output.txt”
回声................................................ ........................................ >>“%ScriptsPath%output.txt”
复制“%ScriptsPath%output.txt”+“%%G.txt”“%ScriptsPath%output.txt”
删除“%%G.txt”
)
for %f in ("c:\path\to\dir\*.sql") do sqlcmd -S [SERVER_NAME] -d [DATABASE_NAME] -i "%f" -b
尝试
for
循环。该命令的选项已经演变,我不确定您使用的是哪个版本的 DOS,但假设 DOS 包含“来自 Windows XP 的cmd.exe
”,类似这样的内容可以工作:
for /r . %f in (*.sql) do @echo %f
好的,这只会打印文件的名称。我假设您已经有一个可以从命令行运行的程序,该程序将执行 one SQL 文件,您可以使用它来代替
echo
。
欲了解更多信息,请尝试
for /?
。
SET Host=pmegat
SET Database=pdb
SET user=usr
SET pwd=abc123
SET ScriptsPath=C:\Work\Scripts
IF EXIST "%ScriptsPath%output.sql" del "%ScriptsPath%output.sql"
echo SPOOL Script.log >> "%ScriptsPath%output.sql"
FOR /R "%ScriptsPath%" %%G IN (*.sql) DO (
echo Prompt execute @"%%G" >> "%ScriptsPath%output.sql"
echo @"%%G" >> "%ScriptsPath%output.sql"
)
echo SPOOL OFF >> "%ScriptsPath%output.sql"
echo exit >> "%ScriptsPath%output.sql"
sqlplus %user%/%pwd%@%Host%:1521/%Database% @"%ScriptsPath%output.sql"