【问题标题】:How to get SQLCMD to output errors and warnings only如何让 SQLCMD 仅输出错误和警告
【发布时间】:2012-06-28 11:04:45
【问题描述】:

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

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

【问题讨论】:

    标签: sql sql-server sql-server-2008-r2 sqlcmd


    【解决方案1】:

    无法通过传递参数来阻止SQLCMD 返回非错误输出消息。

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

    这是通过传递-r 参数来完成的。来自books online

    -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
    

    【讨论】:

    • 谢谢。 MSDN 提到了 -m 和 -V 选项:[link]msdn.microsoft.com/en-us/library/ms162773.aspx - 但它说严重级别需要等于或小于提供的数字。对我来说,这似乎很奇怪,例如为什么有人想要信息消息而不是错误。我希望有一个更 log4net(例如)样式的严重性过滤器(指定 ERROR 并仅获取 ERROR 和 FATAL 消息)
    • 注意:然后我将使用 -r0 (仅获取错误)。只需要在没有“警告”的情况下做。
    【解决方案2】:

    除此之外,如果您将错误发送到文件中,我发现了这个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。这有点令人费解,但有效。我唯一的问题是它似乎创建了一个空的错误日志文件,即使没有错误。

    【讨论】:

      【解决方案3】:

      看起来打印语句是通过 -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 一个包含打印的存储过程。

      【讨论】:

      • 这没有帮助
      猜你喜欢
      • 2015-10-03
      • 2017-12-14
      • 2014-10-23
      • 2011-09-20
      • 1970-01-01
      • 2011-06-24
      • 2014-11-22
      • 1970-01-01
      相关资源
      最近更新 更多