2012-06-28 1 views
4

Как вы можете заставить SQLCMD при выполнении файла сценария SQL просто выводить какие-либо ошибки или предупреждения, с которыми он сталкивается?Как получить SQLCMD для вывода только ошибок и предупреждений

По сути, я не хочу, чтобы на основе информации выводились сообщения.

ответ

14

Невозможно предотвратить вывод SQLCMD выходных сообщений без ошибок, передав ему параметр.

Однако, вы можете перенаправить сообщения об ошибках на STDERR, а затем направлять все остальные сообщения на NUL.

Это делается путем передачи параметра -r. От books online:

-r [0 | 1] msgs to stderr

Перенаправляет вывод сообщения об ошибке на экран (stderr). Если вы не укажете параметр или если вы укажете 0, будут перенаправлены только сообщения об ошибках с уровнем серьезности 11 или выше. Если вы укажете 1, все сообщения об ошибках, включая PRINT, будут перенаправлены. Не действует, если вы используете -o. По умолчанию сообщения отправляются на stdout.

Набор -r в зависимости от того, какие именно сообщения об ошибках вы хотите отобразить, но для отображения всех выходов сообщение об ошибке, пример команды будет:

sqlcmd -Q "select 1 as a; select 1/0 as b" -E -r1 1> NUL 
+1

Спасибо. MSDN упоминает параметры -m и -V: [link] http://msdn.microsoft.com/en-us/library/ms162773.aspx - но он говорит, что уровень серьезности должен быть равен или меньше предоставленному числу. Для меня это кажется очень странным, например, почему кому-то нужны информационные сообщения, но не ошибки. Я надеялся на еще один log4net (например) фильтр строгости стиля (укажите ERROR и получите только сообщения ERROR и FATAL) – nashwan

+0

Примечание: Я буду использовать -r0, затем (чтобы получить только ошибки). Просто придется обойтись без «предупреждений». – nashwan

1

Подобно тому, как дополнение к этому, если вы отправка ошибок в файл, я нашел это https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/

который я использовал. Если вы опустите настройку OUT, вы получите только журнал ошибок. Так у вас есть команда, как это:

sqlcmd -x -E -S MyServer -i C:\MySQLBatchToRun.sql 

Тогда в MySQLBatchToRun.sql, что-то вроде этого

USE MyDatabase 
:Error C:\MyErrorLog.txt 
:r C:\MySQLScript.sql 
GO 

В MySQLScript.sql у вас есть фактический SQL для запуска. Это немного запутанно, но работает. Единственная проблема, с которой я сталкиваюсь, заключается в том, что создается пустой файл журнала ошибок, даже если нет ошибки.

0

Похоже, заявление печати отправляется на стандартный вывод с -r1, так что вы можете использовать их для входа отдельно от выхода следующим образом:

sqlcmd -Q "print 'hello logfile';select 'Ted' as bro" -r1 1> C:\output.txt 2> C:\logfile.txt 

Это также работает с -i файл_вводом нравится: SQLCMD -i helloTed.sql -r1 1> C: \ output.txt 2> C: \ logfile.txt

helloTed.sql:

печать 'привет файл_журнала';
выберите «Ted», как братан

Возможно, вы могли бы использовать -Д и вставить EXEC хранимую процедуру, которая содержит отпечатки.