【问题标题】:DOS command to execute all SQL script in a directory and subdirectoriesDOS命令执行一个目录和子目录中的所有SQL脚本
【发布时间】:2010-03-01 14:42:51
【问题描述】:

我需要一个可以执行的 DOS 命令或批处理 (.bat) 文件来运行目录及其子目录中的所有 *.sql 脚本。解决方案是什么?

【问题讨论】:

    标签: sql tsql batch-file dos


    【解决方案1】:

    以下内容将帮助您入门

    for /r %f in (*.sql) do echo %f
    

    从命令行运行,将打印当前目录和所有子目录中所有 SQL 文件的名称。

    然后将sqlcmd <connection args> -i%f 替换为echo %f 以执行脚本。

    希望这会有所帮助。

    【讨论】:

    • 不予置评的否决票?怎么会这样?说真的,如果你不喜欢我的回答,或者有什么问题,你能告诉我吗?我们都在这里学习。
    • 尽量使用不带空格的目录和文件名。 (可能很方便den4b.com/?x=downloads&product=renamer
    【解决方案2】:

    给你。该批处理文件将执行一个目录及其子目录中的所有 sql 文件。它还将创建一个包含结果的 output.txt 文件,以便您可以查看错误等。关于批处理文件的一些说明:

    • [YourDatabase] 是您要对其执行脚本的数据库的名称。
    • [YourPath] 是您保存所有脚本的路径。
    • [YourServerName\YourInstanceName] 是 SQL 服务器名称和实例名称,用“\”分隔
    • 您需要将每个变量的“=”后面的文本替换为适合您服务器的文本
    • 确保不要在“=”周围放置空格
    • 不要在 [YourPath] 周围加上任何引号
    • 确保 [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%`跨度>
    【解决方案3】:
    for %f in ("c:\path\to\dir\*.sql") do sqlcmd -S [SERVER_NAME] -d [DATABASE_NAME] -i "%f" -b
    

    【讨论】:

      【解决方案4】:

      尝试for 循环。该命令的选项已经发展,我不确定您使用的是哪个版本的 DOS,但假设 DOS 包含“Windows XP 中的cmd.exe”,这样的事情可能会起作用:

      for /r . %f in (*.sql) do @echo %f
      

      好的,这只会打印文件名。我假设您已经有一个可以从命令行运行的程序,该程序将执行 one SQL 文件,您可以使用它来代替 echo

      如需了解更多信息,请尝试for /?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-17
        • 2011-11-29
        • 2012-05-18
        • 2012-10-24
        • 2012-09-02
        相关资源
        最近更新 更多