我需要在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的唯一办法吗?到命名管道,然后从命名管道的结果中删除错误消息?
我不想在编写输出时遇到任何延迟,但确实希望将完整的结果返回给客户端。
答案 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
我希望有所帮助。