分离sqlcmd的stdout和stderr

分离sqlcmd的stdout和stderr,sqlcmd,azure-sqldw,Sqlcmd,Azure Sqldw,我需要在Linux上使用sqlcmd实现Azure SQL数据仓库的测试工具。在测试中,我希望捕获sqlcmd遇到的任何错误消息,但使用-o参数将查询结果发送到/dev/null。在回顾中,似乎如果使用-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 er

我需要在Linux上使用sqlcmd实现Azure SQL数据仓库的测试工具。在测试中,我希望捕获sqlcmd遇到的任何错误消息,但使用-o参数将查询结果发送到/dev/null。在回顾中,似乎如果使用-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,然后从命名管道的结果中删除错误消息吗


我不希望在写入输出时产生任何延迟,但希望将完整的结果返回给客户端。

sqlcmd-I debug_dir/test2.sql-r12>/tmp/2.out 1>/tmp/1.out对您有效吗

我在本地的盒子上试过:

$>cat debug_dir/test2.sql

从test1中选择*; 去

从test1中选择*i='a'; 去

从test2中选择*; 去

$>sqlcmd-sxxx-N-uyyy-pzzz-daaa-I-I调试目录/test2.sql-r12>/tmp/2.out 1>/tmp/1.out

$>cat/tmp/1.out i j k

3行受影响 a、b、c

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

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


我希望这有帮助。

sqlcmd-I debug_dir/test2.sql-r12>/tmp/2.out 1>/tmp/1.out对您有用吗

我在本地的盒子上试过:

$>cat debug_dir/test2.sql

从test1中选择*; 去

从test1中选择*i='a'; 去

从test2中选择*; 去

$>sqlcmd-sxxx-N-uyyy-pzzz-daaa-I-I调试目录/test2.sql-r12>/tmp/2.out 1>/tmp/1.out

$>cat/tmp/1.out i j k

3行受影响 a、b、c

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

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

我希望这有帮助

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