【发布时间】:2010-03-01 14:42:51
【问题描述】:
我需要一个可以执行的 DOS 命令或批处理 (.bat) 文件来运行目录及其子目录中的所有 *.sql 脚本。解决方案是什么?
【问题讨论】:
标签: sql tsql batch-file dos
我需要一个可以执行的 DOS 命令或批处理 (.bat) 文件来运行目录及其子目录中的所有 *.sql 脚本。解决方案是什么?
【问题讨论】:
标签: sql tsql batch-file dos
以下内容将帮助您入门
for /r %f in (*.sql) do echo %f
从命令行运行,将打印当前目录和所有子目录中所有 SQL 文件的名称。
然后将sqlcmd <connection args> -i%f 替换为echo %f 以执行脚本。
希望这会有所帮助。
【讨论】:
给你。该批处理文件将执行一个目录及其子目录中的所有 sql 文件。它还将创建一个包含结果的 output.txt 文件,以便您可以查看错误等。关于批处理文件的一些说明:
确保 [YourPath] 末尾有一个“\”
SET 数据库=[YourDatabase]
SET ScriptsPath=[YourPath]
SET ServerInstance=[YourServerName\YourInstanceName]
IF EXIST "%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"
回显执行:“%%G”>>“%ScriptsPath%output.txt”
回声 .................................... ............................. >> "%ScriptsPath%output.txt"
复制“%ScriptsPath%output.txt”+“%%G.txt”“%ScriptsPath%output.txt”
del "%%G.txt"
)
【讨论】:
SETs 之后添加以下行可确保尾部有一个反斜杠:`IF NOT %ScriptsPath:~-1% == "\" SET ScriptsPath=%ScriptsPath%`跨度>
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 /?。
【讨论】: