Мне нужна команда DOS или пакетный (.bat) файл, который я могу выполнить для запуска всех сценариев *.sql в каталоге и его подкаталогах. Каким будет решение?
Команда DOS для выполнения всех сценариев SQL в каталоге и подкаталогах
Ответы (3)
Следующее поможет вам начать
for /r %f in (*.sql) do echo %f
Запустите из командной строки, которая напечатает имена всех файлов SQL в текущем каталоге и всех подкаталогах.
Затем замените sqlcmd <connection args> -i%f на echo %f, чтобы выполнить сценарии.
Надеюсь это поможет.
Ну вот. Этот пакетный файл выполнит все файлы 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"
)
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 /?.