Sql-Server

如何讓 SQLCMD 只輸出錯誤和警告?

  • August 12, 2015

在執行 SQL 腳本文件時,如何讓 SQLCMD 僅輸出它遇到的任何錯誤或警告?

我基本上不希望輸出基於資訊的消息。

預設情況下,SQLCMD將所有非錯誤消息和錯誤消息發送到stdout。因此,嘗試重定向輸出將無濟於事。

為了只獲取一種或另一種類型的消息(錯誤或非錯誤),您需要做的第一件事是通過將錯誤消息(嚴重級別 11 或更高級別)發送到stderr來告訴****SQLCMD將它們分開。為此,您可以使用命令行開關,指定該開關的選項(即)。此時,在執行 SQLCMD 和查看螢幕上顯示的任何類型的消息方面沒有明顯差異。-r``0``-r0

下一部分是過濾掉髮送到stdout的正常消息。這可以通過將標準輸出消息重定向到某個地方來完成>,但是到哪裡呢?你可以這樣做> file.txt,但我懷疑你想要一個你不想開始的消息文件。幸運的是,DOS 有一個NUL關鍵字(不是typeo:它有一個L,而不是兩個),就像/dev/null在 Unix 中一樣。這意味著您可以使用以下內容將輸出重定向到無處:> NUL.

以下將執行PRINT命令並且不顯示任何輸出,因為不會生成錯誤,並且不會創建包含PRINT命令輸出的文件:

CD %TEMP%

SQLCMD -E -Q "print 1;" -r0 > NUL

但以下顯示一條錯誤消息,因為這些消息沒有被重定向到NUL

CD %TEMP%

SQLCMD -E -Q "print a;" -r0 > NUL

回報:

Msg 128, Level 15, State 1, Server DALI, Line 1
The name "a" is not permitted in this context. Valid expressions are constants,
constant expressions, and (in some contexts) variables. Column names are not permitted.

以下將起作用:

sqlcmd -U user -P pass -S Server -Q "sp_who" -r0 1> test.log

查詢的輸出將被放入日誌中,螢幕上不會列印任何內容。

有關sqlcmd 的 MSDN 文章的更多詳細資訊。

引用自:https://dba.stackexchange.com/questions/20096