我们使用Invoke-sqlcmd cmdlet使用powershell执行SQL查询。
如果SQl服务器实例被指定为错误则抛出异常。
虽然我已经在try catch中捕获了错误,但仍然在控制台中抛出异常
“Invoke-Sqlcmd:发生与网络相关或特定于实例的错误 同时建立与SQL Server的连接“
try {
$Qresult= Invoke-sqlcmd -query $SelectQuery -ServerInstance $srvInstance
$Qresult = $Qresult| % { $_.$columnName+"`n" }
LogWrite "$Qresult`n"
}
catch {
Write-error "Error occured when executing sql $SelectQuery"
LogWrite $Error[0]
}
如何验证SQL Server实例是否可用并且在执行任何查询之前它是否正在运行?
答案 0 :(得分:5)
function SQL-Ping-Instance
{
param (
[parameter(Mandatory = $true)][string] $ServerInstance,
[parameter(Mandatory = $false)][int] $TimeOut = 1
)
$PingResult = $false
try
{
$SqlCatalog = "master"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $ServerInstance; Database = $SqlCatalog; Integrated Security = True; Connection Timeout=$TimeOut"
$SqlConnection.Open()
$PingResult = $SqlConnection.State -eq "Open"
}
catch
{
}
finally
{
$SqlConnection.Close()
}
return $pingResult
}
if (SQL-Ping-Instance $srvInstance)
{
$Qresult= Invoke-sqlcmd -query $SelectQuery -ServerInstance $srvInstance
$Qresult = $Qresult| % { $_.$columnName+"`n" }
LogWrite "$Qresult`n"
}
else
{
LogWrite "Couldn't contact $srvInstance"
}
答案 1 :(得分:1)
使用try / catch无法捕获非终止错误。为了使错误成为终止错误,请将ErrorAction值设置为“Stop”。如果没有帮助,请尝试添加-AbortOnError开关
try
{
Invoke-sqlcmd -query... -ErrorAction Stop
}
catch
{
$_
}
答案 2 :(得分:0)
使用powershell try / catch块来捕获任何错误 - $ _将包含完整的错误描述
cls
try
{
invoke-sqlcmd stuff here
}
catch
{
$_
}
您也可以ping服务器但尝试执行命令将测试服务器,测试实例,并测试数据库同时运行查询,并且您的try / catch块将在以下处理问题每个阶段。