Команда DOS для выполнения всех сценариев SQL в каталоге и подкаталогах - PullRequest
3 голосов
/ 01 марта 2010

Мне нужна команда DOS или командный файл (.bat), который я могу выполнить для запуска всех сценариев * .sql в каталоге и его подкаталогах. Каким будет решение?

Ответы [ 4 ]

6 голосов
/ 01 марта 2010

Следующее поможет вам начать

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

Запустите из командной строки, которая напечатает имена всех файлов SQL в текущем каталоге и всех подкаталогах.

Затем замените sqlcmd <connection args> -i%f на echo %f для выполнения сценариев.

Надеюсь, это поможет.

3 голосов
/ 18 июня 2010

Вот, пожалуйста. Этот пакетный файл выполнит все sql-файлы в каталоге и его подкаталогах. Он также создаст файл output.txt с результатами, чтобы вы могли видеть ошибки и еще много чего. Некоторые примечания к пакетному файлу:

  • [YourDatabase] - это имя базы данных, для которой вы хотите выполнить сценарии.
  • [YourPath] - это путь, по которому вы храните все сценарии.
  • [YourServerName \ YourInstanceName] - это имя сервера SQL и имя экземпляра, разделенные '\'
  • Вы захотите заменить текст после '=' для каждой переменной тем, что подходит для вашего сервера
  • Обязательно НЕ ставьте пробелы вокруг '='
  • Не заключайте в кавычки [YourPath]
  • Убедитесь, что [YourPath] имеет '\' в конце

    SET Database = [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% База данных% -S% ServerInstance% -i "%% G" -o "%% G.txt"

    эхо .............................................. ....................................... >> "% ScriptsPath% output.txt"

    echo Выполнение: "%% G" >> "% ScriptsPath% output.txt"

    эхо .............................................. ....................................... >> "% ScriptsPath% output.txt"

    copy "% ScriptsPath% output.txt" + "%% G.txt" "% ScriptsPath% output.txt"

    del "%% G.txt"

    )

3 голосов
/ 11 июня 2010
for %f in ("c:\path\to\dir\*.sql") do sqlcmd -S [SERVER_NAME] -d [DATABASE_NAME] -i "%f" -b
0 голосов
/ 01 марта 2010

Попробуйте цикл for. Опции этой команды развивались, и я не уверен, какую версию DOS вы используете, но при условии, что DOS включает «cmd.exe из Windows XP», что-то вроде этого может работать:

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

Хорошо, это будет печатать только имена файлов. Я предполагаю, что у вас уже есть программа, которую вы можете запустить из командной строки, которая выполнит один файл SQL, который вы можете использовать вместо echo.

Для получения дополнительной информации, попробуйте for /?.

...