【问题标题】:sqlcmd not returning errorsqlcmd 不返回错误
【发布时间】:2016-05-12 00:00:07
【问题描述】:

我正在通过 power shell 运行以下 sqlcmd

$dump = sqlcmd -S $server -Q $sqlCommand -t $queryTimeout -b -h -1 -W

我尝试将输出写入屏幕

$message = "Error while executing sql {0}, Error details {1}" -f "$sqlCommand","$dump" 
Write-Warning $message

但是$dump 是空的

【问题讨论】:

  • 您是否希望 $dump 包含错误? $dump 将只包含发送到输出流的数据。如果它来自错误流,您需要重定向 $dump = sqlcmd -S $server -Q $sqlCommand -t $queryTimeout -b -h -1 -W 2>&1... 可能
  • SQLCMD 是一个奇怪的生物。我会通过在 SQL 中运行查询并检查您是否确实得到了结果来确认,然后弄乱开关。我倾向于运行完整的脚本,所以我使用-i 并给出一个文件名,但我只能让它与& (SQLCMD) -s localhost -x -i $file 一起工作。尝试移除所有开关,如果得到结果,请重新添加它们。
  • 我希望转储包含 sql 文件的输出,就像我在 SQL 管理工作室中运行它一样
  • @Matt 您给出的示例有效,谢谢,请给出答案。 2>&1 用于什么?

标签: sql-server windows powershell sql-server-2012 powershell-3.0


【解决方案1】:

我不熟悉sqlcmd.exe,但根据您对预期的描述,我认为 sqlcmd 正在将信息发送到错误流中。这是一种看似奇怪但普遍的做法,因此会发生。

这里的问题是变量$dump 只会收集发送到输出流的信息。您可以做的是使用重定向器将错误流重定向到输出流。更多信息可以关注about_redirection

所以使用以下方法将完成:

$dump = sqlcmd -S $server -Q $sqlCommand -t $queryTimeout -b -h -1 -W 2>&1

链接文档将2>&1描述为

将错误 (2) 和成功输出 (1) 发送到成功输出流。

现在$dump 应该包含您要查找的内容。不过要小心,因为它可能包含比您预期的更多的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2021-01-04
    • 2014-01-16
    相关资源
    最近更新 更多