Как вы можете заставить SQLCMD при выполнении файла сценария SQL просто выводить любые ошибки или предупреждения, с которыми он сталкивается?
Я, по сути, не хочу выводить информационные сообщения.
sql-server
sql-server-2008-r2
sqlcmd
bytedev
источник
источник
2> Err.txt
, но похоже, чтоSQLCMD
он не разделяет вывод.-r0
переключателя командной строки, и в этом случае они могут быть перенаправлены в файл с помощью2>
или могут отображаться, пока обычные сообщения перенаправляются через>
. Пожалуйста, смотрите мой ответ для деталей.Ответы:
По умолчанию SQLCMD отправляет все сообщения, не связанные с ошибками, и сообщения об ошибках на стандартный вывод . Следовательно, попытка перенаправить вывод не поможет.
Первое, что вам нужно сделать, чтобы получить только один или другой тип сообщений (с ошибками или без ошибок), - сказать SQLCMD разделить их, отправив сообщения об ошибках (уровень серьезности 11 или выше) в stderr . Это можно сделать с помощью параметра
-r
командной строки, указав0
в качестве параметра этот параметр (т-r0
. Е. ). На данный момент нет видимой разницы с точки зрения запуска SQLCMD и просмотра сообщений любого типа, отображаемых на экране.Следующая часть - отфильтровать обычные сообщения, идущие на стандартный вывод . Это можно сделать, перенаправив сообщения stdout куда-нибудь через
>
, но куда? Вы могли бы сделать> file.txt
, но я сомневаюсь, что вам нужен файл сообщений, с которого вы не хотели начинать. К счастью, в DOS естьNUL
ключевое слово (это не типо: у него есть одноL
, а не два), которое работает как/dev/null
в Unix. Значение вы можете использовать следующий для вывода перенаправления в никуда:> NUL
.Следующая
PRINT
команда выполнит команду и не покажет никаких выходных данных, поскольку ошибки не генерируются, и не создается файл, который бы содержал выходные данныеPRINT
команды:Но следующее показывает сообщение об ошибке, поскольку они не перенаправляются на
NUL
:Возвращает:
источник
Следующее будет работать:
sqlcmd -U user -P pass -S Server -Q "sp_who" -r0 1> test.log
Вывод запроса будет занесен в журнал, и на экране ничего не будет напечатано.
Более подробно в статье MSDN о sqlcmd .
источник
-r1
отправляет все сообщения в stderr , включаяPRINT
иRAISERROR('', 10, 1)
сообщения. Вы должны использовать-r0
эти регулярные информационные сообщения для вывода на стандартный вывод , чтобы они перенаправлялись в test.log .Нашел это на SQLServerCentral
http://www.sqlservercentral.com/Forums/Topic536968-146-1.aspx
источник
-r1
отправляет все сообщения в stderr , включаяPRINT
иRAISERROR('', 10, 1)
сообщения. Вам нужно использовать,-r0
чтобы эти регулярные информационные сообщения отправлялись на стандартный вывод таким образом, чтобы они перенаправлялись в install.log .