我正在尝试运行一个执行数据库维护存储过程的 Azure Runbook。但是,
$command.ExecuteNonQuery()
给我错误 Exception calling "ExecuteNonQuery" with "0" argument(s): "The transaction count is not 0 in the following PowerShell script:
$credential = Get-AutomationPSCredential -Name 'Credential'
$userName = $credential.UserName
$password = $credential.GetNetworkCredential().Password
$connectionString = "Data Source=server.database.windows.net;Initial Catalog=database;Integrated Security=False;User ID=$userName;Password=$password"
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$connection.Open()
$transaction = $connection.BeginTransaction()
try {
$command = New-Object System.Data.SqlClient.SqlCommand
$command.Connection = $connection
$command.Transaction = $transaction
$command.CommandType = [System.Data.CommandType]::StoredProcedure
$command.CommandText = "dbo.IndexOptimize"
$command.Parameters.AddWithValue("@Databases", "USER_DATABASES")
$command.Parameters.AddWithValue("@MinNumberOfPages", "500")
$command.Parameters.AddWithValue("@FragmentationMedium", "INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE")
$command.Parameters.AddWithValue("@FragmentationHigh", "INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE")
$command.Parameters.AddWithValue("@FragmentationLevel1", "5")
$command.Parameters.AddWithValue("@FragmentationLevel2", "30")
$command.Parameters.AddWithValue("@UpdateStatistics", "COLUMNS")
$command.Parameters.AddWithValue("@LogToTable", "Y")
$command.ExecuteNonQuery()
$transaction.Commit()
}
catch {
try {
$transaction.Rollback()
}
catch {
# Microsoft recommends to catch and log and/or ignore rollback exceptions
}
throw
}
finally {
$command.Dispose()
$transaction.Dispose()
$connection.Close()
}