2012-06-28 52 views

回答

14

通過傳遞一個參數來阻止SQLCMD返回非錯誤輸出消息是不可能的。

但是,您可以做的是將錯誤消息重定向到STDERR,然後將所有其他消息指向NUL

這是通過傳遞-r參數來完成的。從books online

-r [0 | 1] msgs到stderr

將錯誤信息輸出重定向到屏幕(stderr)。如果不指定參數或者指定0,則只有嚴重級別爲11或更高級別的錯誤消息被重定向。如果指定1,則包括PRINT的所有錯誤消息輸出都將被重定向。如果使用-o,則不起作用。默認情況下,消息被髮送到標準輸出。

-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 INPUTFILE喜歡: SQLCMD -i helloTed.sql -r1 1> C:\ output.txt的2> C:\ LOGFILE.TXT

helloTed.sql:

打印 '你好日誌文件';
選擇「特德」作爲兄弟

也許你可以使用-Q和exec的插入包含打印存儲的過程。