任何知道如何在使用print ' '
时将sql脚本中的Invoke-Sqlcmd
路由到日志文件的人?
我尝试使用sqlcmd -o someoutfile.txt
,但它会覆盖,它不会附加到现有文件。如果发生SQL错误,则只将错误消息发送到文件,而不是print ' '
。
使用Invoke-Sqlcmd | out-file someoutfile.txt -Append
时,它仅附加Write-Output
并最终附加SQL错误,但不会附加sql脚本中的print ' '
。
有没有人为此找到解决方案?
答案 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中不可见。