如何让 SQLCMD 只输出错误和警告?

byt*_*dev 8 sql-server sql-server-2008-r2 sqlcmd

在执行 SQL 脚本文件时,如何让 SQLCMD 只输出它遇到的任何错误或警告?

我基本上不希望输出基于信息的消息。

Sol*_*zky 5

默认情况下,SQLCMD将所有非错误消息和错误消息发送到stdout。因此,尝试重定向输出无济于事。

为了仅获取一种或另一种类型的消息(错误或非错误),您需要做的第一件事是通过将错误消息(严重性级别 11 或更高)发送到stderr来告诉SQLCMD将它们分开。您可以使用命令行开关执行此操作,指定该开关的选项(即)。此时,在运行 SQLCMD 和查看屏幕上显示的任何类型的消息方面没有明显区别。-r0-r0

下一部分是过滤掉发送到stdout的常规消息。这可以通过将stdout消息重定向到某个地方来完成>,但是要从哪里开始呢?你可以这样做> file.txt,但我怀疑你想要一个你不想开始的消息文件。幸运的是,DOS 有一个NUL关键字(这不是一个类型:它有一个L,而不是两个),就像/dev/null在 Unix 中一样。这意味着您可以使用以下内容将输出重定向到任何地方:> NUL.

以下将执行PRINT命令并且不显示任何输出,因为没有生成错误,并且不会创建包含PRINT命令输出的文件:

CD %TEMP%

SQLCMD -E -Q "print 1;" -r0 > NUL
Run Code Online (Sandbox Code Playgroud)

但以下显示一条错误消息,因为它们没有被重定向到NUL

CD %TEMP%

SQLCMD -E -Q "print a;" -r0 > NUL
Run Code Online (Sandbox Code Playgroud)

返回:

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.
Run Code Online (Sandbox Code Playgroud)


Alf*_*f47 0

在 SQLServerCentral 上找到了这个

sqlcmd -E -i"install.sql" -r1 2> install-err.log 1> install.log
Run Code Online (Sandbox Code Playgroud)

http://www.sqlservercentral.com/Forums/Topic536968-146-1.aspx