Команда SQLCMD, Как сохранить вывод в файл журнала

Следующий вопрос помог мне решить проблему выполнения нескольких сценариев SQL, расположенных в файле. Запустить все файлы SQL в каталоге Однако я не понял, как чтобы перенаправить вывод в отдельный файл журнала. Кто-то предложил следующий скрипт, но так как я его не понимаю, он не сработал, и я не могу найти ошибку.

for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) 

person dolly_do    schedule 28.02.2018    source источник


Ответы (2)


Если вам нужен вывод в один общий файл, вам следует использовать ответ @Abhishek.

Если вам нужен вывод в отдельный файл журнала для каждого входного файла sql, вы можете использовать параметр -o команды sqlcmd. Ваш файл bat может выглядеть так:

for %%G in (*.sql) do sqlcmd /S <servername> /d <dbname> -E -i"%%G" -o C:\logs\%%G.log
pause

В этом случае для

1.sql

2.sql

ты получишь:

1.sql.log

2.sql.log

person AlbertK    schedule 28.02.2018
comment
Вы можете получить тот же результат через: for %%G in (*.sql) do (sqlcmd /S <servername> /d <dbname> -E -i "%%G" > C:\logs\%%~nG.log) В этом случае для file1.sql и file2.sql вы получите file1.log и file2.log - person Aacini; 04.07.2019

Вы ищете Перенаправление команд.

По вашему примеру -

for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1

после выполнения скрипта sql вывод будет перенаправлен и добавлен вывод команды в конец файла (здесь sql.log) без удаления информации, которая уже находится в файле (> >) и перенаправляет STDERR (2) в дескриптор STDOUT (1) - 2>&1

Дополнительные сведения см. здесь и здесь.

person Abhishek    schedule 28.02.2018
comment
Я должен что-то упустить, так как это не работает для меня. Я сделал точно так, как указано, но в моем каталоге не сохраняются журналы - person dolly_do; 28.02.2018