2013-07-10 57 views
1

任何人知道如何在使用Invoke-Sqlcmd时将sql脚本中的print ' '路由到日志文件?如何将SQL打印输出路由到日志文件?

我试过使用sqlcmd -o someoutfile.txt,但它覆盖,它不附加到现有的文件。如果发生SQL错误,则只会将错误消息发送到文件,而不是print ' '。 使用Invoke-Sqlcmd | out-file someoutfile.txt -Append时,它只附加Write-Output,最终SQL错误,但不包含在执行的sql脚本中的print ' '

有没有人找到解决方案?

+0

您是否尝试将所有输出流重定向到输出文件,以防消息被写入详细或调试流? ('Invoke-Sqlcmd *>&1 | Out-File ...') –

回答

3

Invoke-SqlCmd使用verbose参数实现T-SQL PRINT语句和RAISERROR。要捕获详细的输出,首先你需要在你的电话的参数来调用,即SQLCMD调用,SQLCMD -verbose和未来,你可以做两件事情之一:如果您使用PowerShell的V3

以上可以重定向详细输出:

invoke-sqlcmd -verbose 4>&1 | outfile someoutfile.txt 

如果你正在使用PowerShell V2你不能重定向的详细输出到文件,但是你可以使用启动转录到所有屏幕输出发送到一个文件中。这种方法有一点 - 它不适用于SQL Agent PowerShell作业步骤。然而,它将使用调用powershell.exe的cmdexec作业步骤。

+0

我使用的是Powershell v2,详细信息不包括sql脚本print'',只有powershell脚本中的写入输出。 看来升级到v3可能会解决问题。谢谢。 –

0

而且一个瞬间......

命令“调用,SQLCMD”有一个参数-SeverityLevel。 SeverityLevel指定错误消息严重性级别的下限Invoke-Sqlcmd返回到ERRORLEVEL PowerShell。

Invoke-Sqlcmd不报告严重性为10的信息性消息的严重性!

严重等级10:状态信息 这是一条信息性消息,指示由用户输入的信息中的错误导致的问题。严重级别0在SQL Server中不可见。

相关问题