如何将SQL打印输出路由到日志文件?

时间:2013-07-10 07:17:28

标签: sql powershell invoke

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

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

有没有人为此找到解决方案?

2 个答案:

答案 0 :(得分:3)

Invoke-SqlCmd使用verbose参数实现T-SQL PRINT语句和RAISERROR。要捕获详细输出,首先需要在调用invola-sqlcmd中包含该参数,即 invoke-sqlcmd -verbose ,然后您可以执行以下两项操作之一:

如果您使用的是Powershell V3或更高版本,则可以重定向详细输出:

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

如果您使用的是Powershell V2,则无法将详细输出重定向到文件,但您可以使用start-transcript将所有屏幕输出发送到文件。这种方法有一个问题 - 它不适用于SQL Agent Powershell作业步骤。但它可以使用cmdexec作业步骤调用powershell.exe。

答案 1 :(得分:0)

有一刻......

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

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

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