分离sqlcmd的stdout和stderr

时间:2017-02-17 17:37:00

标签: sqlcmd azure-sqldw

我需要在Linux上使用sqlcmd为Azure SQL数据仓库实现测试工具。在我的测试中,我想捕获sqlcmd遇到的任何错误消息,但是将查询结果发送到/ dev / null(使用-o参数)。在回顾https://msdn.microsoft.com/en-us/library/ms162773.aspx时,似乎如果使用-o,则-r1没有意义。

 -r[0 | 1]
    Redirects the error message output to the screen (stderr). If you do not specify a parameter or if you specify 0, only error messages that have a  severity level of 11 or higher are redirected. If you specify 1, all error message output including PRINT is redirected. Has no effect if you use -o. By default, messages are sent to stdout.

无法理解为什么stdout和stderr会以这种方式混合在一起。

我写作" stdout + stderr"是我在后台运行sqlcmd的唯一办法吗?到命名管道,然后从命名管道的结果中删除错误消息?

我不想在编写输出时遇到任何延迟,但确实希望将完整的结果返回给客户端。

1 个答案:

答案 0 :(得分:1)

" sqlcmd -i debug_dir / test2.sql -r1 2> /tmp/2.out 1> /tmp/1.out"为你工作?

我在当地的盒子上试了一下:

$> cat debug_dir / test2.sql

从test1中选择*; 去

从test1中选择*,其中i =' a&#39 ;; 去

从test2中选择*; 去

$> sqlcmd -S XXX -N -U YYY -P ZZZ -d AAA -I -i debug_dir / test2.sql -r1 2> /tmp/2.out 1> /tmp/1.out

$> cat /tmp/1.out 我是

      2           1           3
      1           2           3
      2           1           4

(3行受影响) a b c

      2           1           4
     11          12           4
     11          12           3
      2           1           3

$> cat /tmp/2.out 消息245,级别16,状态1,服务器XXX,第1行 转换varchar值时转换失败' a'到数据类型int。 消息104309,级别16,状态1,服务器XXX,第1行 输入脚本中没有批处理。

您可以重定向到/ dev / null而不是/tmp/1.out

我希望有所帮助。