如何处理bat和* sql文件中的异常

时间:2012-03-26 06:11:49

标签: tsql powershell sql-server-2008-r2 powershell-v2.0

我正在使用powershell脚本来运行一些* .sql文件。我可以使用下面的脚本获取输出值。

$return_value = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1"

问题是我必须提取输出文本以确定SQL文件中是否有任何错误。

有没有最佳做法来处理powershell文件和* .sql文件中的异常?

我是否必须捕获每个SQL文件中的错误以生成预定义的输出?

2 个答案:

答案 0 :(得分:1)

可能不适合您,但Invoke-SqlCmd cmdlet有一个参数called "-ErrorVariable" to trap error messages

答案 1 :(得分:0)

您可以使用sqlcmd的退出代码来确定是否存在错误。

$output = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1"
if ($LASTEXITCODE -ne 0) {
    Write-Error $output
}

如果退出代码不为0,您通常会在stdoutstderr中找到错误消息。您可以将两者放在输出变量中,如下所示:

$output = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1" 2>&1

如果stderr中有任何内容,它将与stdout中的任何内容合并。

在您的SQL脚本中,您还需要实现最佳实践错误处理技术,例如使用try / catch构造并在有保证的情况下使用事务。

http://msdn.microsoft.com/en-us/library/ms179296.aspx

如果在SQL脚本中捕获异常,则打印错误消息并设置返回代码,以便在PowerShell中处理错误。