Использование sqlcmd в пакетном скрипте для запуска нескольких скриптов с выходными файлами - PullRequest
0 голосов
/ 31 мая 2018

Мне нужно запустить около 50 скриптов в папке, используя sqlcmd из командного файла.Результаты запроса каждого скрипта должны быть отправлены в его собственный выходной файл.У меня есть рабочий пакетный файл, который запускается каждый из отдельной строки:

sqlcmd -S %INSTANCE% -d %DATABASE% -U %USERNAME% -P "%PASSWORD%" -i "%SCRIPTFOLDER%\master_departments.sql" -s "|" -o "%OUTPUTFOLDER%\master_departments.csv" -W
sqlcmd -S %INSTANCE% -d %DATABASE% -U %USERNAME% -P "%PASSWORD%" -i "%SCRIPTFOLDER%\master_companies.sql" -s "|" -o "%OUTPUTFOLDER%\master_companies.csv" -W
sqlcmd -S %INSTANCE% -d %DATABASE% -U %USERNAME% -P %PASSWORD% -i "%SCRIPTFOLDER%\bill_history.sql" -s "|" -o "%OUTPUTFOLDER%\bill_history.csv" -W
sqlcmd -S %INSTANCE% -d %DATABASE% -U %USERNAME% -P %PASSWORD% -i "%SCRIPTFOLDER%\episodes.sql" -s "|" -o "%OUTPUTFOLDER%\episodes.csv" -W

Есть ли способ запустить это в какой-то цикл?Я видел примеры, которые запускают цикл всех сценариев SQL в папке, но ничего из того, что я видел, не делает это с набором выходных файлов.

По предложению @LotPings я использовал следующий код:

set INSTANCE=<someinstance>
set DATABASE=<somedb>
set USERNAME=<someuser>
set PASSWORD=<somepassword>
set "SCRIPTFOLDER=D:\<pathToScripts>\"
set "OUTPUTFOLDER=D:\<pathForOutput>\"

@Echo off
For /F "tokens=*" %%S in ('Dir /B "%SCRIPTFOLDER%*.sql" '
) do echo sqlcmd -S %INSTANCE% -d %DATABASE% -U %USERNAME% -P "%PASSWORD%" -i "%%~fS" -s "|" -o "%%~dpnS.csv" -W

@pause

Я запустил это в командном файле, и когда он сделал паузу, последняя строка сказала: «Система не может найти указанный файл».

Думая, что это, возможно, обратная косая черта в моих путяхЯ удалил их и поставил косую черту перед .sql в строке for, но получил те же результаты.

Удаление обратной косой черты вообще привело к появлению сообщения «Файл не найден» при запускевот так.

1 Ответ

0 голосов
/ 31 мая 2018

Если имя вашего выходного файла совпадает с именем скрипта (без расширения)
и ваши параметры одинаковы для всех скриптов

@Echo off
For /F "tokens=*" %%S in ('Dir /B "%SCRIPTFOLDER%*.sql" '
) do echo sqlcmd -S %INSTANCE% -d %DATABASE% -U %USERNAME% -P "%PASSWORD%" -i "%%~fS" -s "|" -o "%%~dpnS.csv" -W

Эхо перед sqlcmd предотвращает выполнение и позволяетпросмотреть вывод.Если все выглядит нормально, удалите эхо.

Поведение переменной можно изменить с помощью модификаторов ~, см. For /? или посетите ss64.com / nt / for.html / syntax-args

Чтобы передать папку в пакет, вы можете ввести ее через set / P или передать через аргументы командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...