在多个目录中运行所有SQL文件

时间:2016-04-19 17:10:53

标签: sql-server batch-file cmd sql-server-2012 sqlcmd

我结合了我在网上找到的几个解决方案来尝试实现这一目标。

https://stackoverflow.com/a/6504317/2471473

https://sqlandme.com/2013/03/25/sql-server-executing-multiple-script-files-using-sqlcmd/

我正在尝试使用.sql文件的文件夹位置运行单个.cmd脚本(Script1.cmd)。该单个脚本运行另一个脚本(Script2.cmd)以使用sqlcmd来执行该文件夹位置中的所有.sql文件。它主要起作用,但它会打开一个命令窗口,我必须从每个文件夹位置退出。

Script1.cmd

start Script2.cmd "C:\Location1"
start Script2.cmd "C:\Location2"

Script2.cmd

@Echo Off
FOR /f %%i IN ('DIR %1\*.Sql /B') do call :RunScript %1 %%i
GOTO :END

:RunScript
Echo Executing Script: %2
cd %1
SQLCMD -S Server123 -d Database456 -E -i %2
Echo Completed Script: %2

:END

1 个答案:

答案 0 :(得分:2)

Windows XPWindows Server 2003, Windows Vista (and above)的官方命令行参考似乎过于简短。阅读this (extended) start command documentation

语法:START "title" [/D path] [options] "command" [parameters]

  

始终包含TITLE这可以是一个简单的字符串,如"My Script"或   只是一对空引号""。根据微软的说法   文档,标题是可选的,但取决于另一个   选择的选项如果省略则可能会出现问题。

     

如果command是内部cmd命令或批处理文件,则命令   处理器运行时/K切换到cmd.exe这意味着   命令运行后窗口将保留

下一个Script1.cmd应该可以工作并关闭启动的命令窗口:

start "" cmd /C Script2.cmd "C:\Location1"
start "" cmd /C Script2.cmd "C:\Location2"