11

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

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

4

3 回答 3

26

SQLCMD通过向其传递参数来阻止返回非错误输出消息是不可能的。

但是,您可以做的是将错误消息重定向到STDERR,然后将所有其他消息重定向到NUL

这是通过传递-r参数来完成的。来自网上书籍

-r[0| 1] 向标准错误发送消息

将错误消息输出重定向到屏幕 (stderr)。如果不指定参数或指定 0,则仅重定向严重级别为 11 或更高的错误消息。如果指定 1,则重定向所有错误消息输出,包括 PRINT。如果使用 -o 则无效。默认情况下,消息被发送到标准输出。

根据您要显示的确切错误消息进行设置-r,但要显示所有错误消息输出,示例命令为:

sqlcmd -Q "select 1 as a; select 1/0 as b" -E -r1 1> NUL
于 2012-06-28T12:20:36.783 回答
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。这有点令人费解,但有效。我唯一的问题是它似乎创建了一个空的错误日志文件,即使没有错误。

于 2013-05-28T23:43:16.023 回答
0

看起来打印语句使用 -r1 发送到 stderr,因此您可以使用它们与输出分开记录,如下所示:

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'作为兄弟

可能您可以使用 -Q 并插入 exec 包含打印的存储过程。

于 2017-03-08T21:54:25.753 回答