我从PowerShell中调用SQLCMD执行的T-SQL脚本。 目前我使用“:在错误退出”退出脚本,如果存在因违反使用约束等,这是通过PowerShell的检测1 $ SqlcmdProcess.ExitCode处理的数据错误。
但是,如果有与数据库连接问题,SQLCMD还给出了1的的ExitCode有没有一种方法来设置:在错误退出码为1以外的东西吗? 我知道使用类似的:退出(选择2)要做到这一点,但我宁愿仍然使用:在错误,所以我不必重写剧本。
我从PowerShell中调用SQLCMD执行的T-SQL脚本。 目前我使用“:在错误退出”退出脚本,如果存在因违反使用约束等,这是通过PowerShell的检测1 $ SqlcmdProcess.ExitCode处理的数据错误。
但是,如果有与数据库连接问题,SQLCMD还给出了1的的ExitCode有没有一种方法来设置:在错误退出码为1以外的东西吗? 我知道使用类似的:退出(选择2)要做到这一点,但我宁愿仍然使用:在错误,所以我不必重写剧本。
你可以使用PowerShell中的出口关键字。 下面是一个例子
创建一个名为sqlcmdexit.ps1脚本,用类似如下:
$result = sqlcmd -S"missing" -d master -Q "select @@servername"
if ($result[1] -like "*Error Locating Server/Instance Specified*" -or $result[1] -like "*Could not open a connection to SQL Server*") {
exit 99
}
调用脚本并观察存在的代码:
C:\Users\Public\bin>.\sqlcmdExit.ps1
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : A network-related or instance-specific error has occurred while
establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and i
f SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : Login timeout expired.
C:\Users\Public\bin>$LASTEXITCODE
99
我不知道的任何方式来设置默认的ExitCode。 使用开始处理你可以类似的东西:
$tempFile = [io.path]::GetTempFileName()
$exitCode = (Start-Process -FilePath "sqlcmd.exe" -ArgumentList @"
-S"missing" -d master -Q "select @@servername"
"@ -Wait -NoNewWindow -RedirectStandardOutput $tempFile -Passthru).ExitCode
if ($exitCode -eq 1) {
$result = get-content $tempfile
if ($result[1] -like "*Error Locating Server/Instance Specified*" -or $result[1] -like "*Could not open a connection to SQL Server*") {
remove-item $tempFile
Exit 99
}
}
else {
remove-item $tempfile
Exit $exitCode
}