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

Tsql 如何处理bat和*sql文件中的异常,tsql,powershell,sql-server-2008-r2,powershell-2.0,Tsql,Powershell,Sql Server 2008 R2,Powershell 2.0,我正在使用powershell脚本运行一些*.sql文件。我可以使用下面的脚本获得输出值 $return_value = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1" 问题是,我必须提取输出文本,以确定SQL文件中是否存在任何错误 是否有处理powershell文件和*.sql文件中异常的最佳实践 我是否必须捕获每个SQL文件中的错误以生成预定义的输出 您可以使用sqlcmd的退出代码来确定是否存在错误 $output

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

$return_value = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1"
问题是,我必须提取输出文本,以确定SQL文件中是否存在任何错误

是否有处理powershell文件和*.sql文件中异常的最佳实践


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

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

$output = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1"
if ($LASTEXITCODE -ne 0) {
    Write-Error $output
}
如果退出代码不是0,您通常会在
stdout
stderr
中找到错误消息。您可以将这两个变量都放在输出变量中,如下所示:

$output = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1" 2>&1
如果在
stderr
中有任何内容,它将与
stdout
中的任何内容组合

在您的SQL脚本中,您还需要实现最佳实践错误处理技术,例如使用try/catch构造和在必要时使用事务


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

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

$output = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1"
if ($LASTEXITCODE -ne 0) {
    Write-Error $output
}
如果退出代码不是0,您通常会在
stdout
stderr
中找到错误消息。您可以将这两个变量都放在输出变量中,如下所示:

$output = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1" 2>&1
如果在
stderr
中有任何内容,它将与
stdout
中的任何内容组合

在您的SQL脚本中,您还需要实现最佳实践错误处理技术,例如使用try/catch构造和在必要时使用事务


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

可能不是您的选项,但有一个参数。

可能不是您的选项,但有一个参数。

$LASTEXITCODE始终给我0。。在我的sql文件中,我使用了数据库中不存在的表名,但我得到了$LASTEXITCODE 0。@MichaelSync您可能需要使用。$LASTEXITCODE始终给我0。。在我的sql文件中,我使用了一个数据库中不存在的表名,但我得到了$LASTEXITCODE 0。@MichaelSync您可能需要使用。