Команда DOS для выполнения всех сценариев SQL в каталоге и подкаталогах

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


person Uince    schedule 01.03.2010    source источник


Ответы (3)


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

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

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

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

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

person Binary Worrier    schedule 01.03.2010
comment
Голосование против без комментариев? Как это может быть? Серьезно, если вам не нравится мой ответ или с ним что-то не так, вы можете сообщить мне об этом? Мы все здесь, чтобы учиться. - person Binary Worrier; 11.07.2011
comment
Старайтесь использовать имена каталогов и файлов без пробелов. (это может быть удобно den4b.com/?x=downloads&product=renamer) - person mbmihura; 18.01.2013

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

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

    SET База данных = [Ваша база данных]

    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"

    )

person alex    schedule 18.06.2010
comment
Добавление следующей строки после SETs гарантирует наличие обратной косой черты в конце: `IF NOT %ScriptsPath:~-1% == \ SET ScriptsPath=%ScriptsPath%` - person Carl G; 20.12.2012

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

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

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

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

person itub    schedule 01.03.2010