В настоящее время я использую SMO, чтобы помочь автоматизировать исправление и/или обновление баз данных клиентов, находящихся в производстве. Я использую следующий кодОбъект управления SQL, Продолжить пока еще сообщение об ошибке
Public Sub RunScript(ByVal db As Database, ByVal scriptInfo As FileInfo)
If scriptInfo.Exists Then
RaiseEvent LogMessage("Executing Indicated Script: " & scriptInfo.Name)
Using sr As New StreamReader(scriptInfo.FullName)
Dim script As String = sr.ReadToEnd
Try
db.ExecuteNonQuery(script)
Catch ex As Exception
RaiseEvent LogMessage("ERROR: " & ex.Message.ToString)
db.ExecuteNonQuery(script,
Microsoft.SqlServer.Management.Common.ExecutionTypes.ContinueOnError)
End Try
End Using
End If
End Sub
Что я делаю регистрируя SQLConnection
сообщения, поступающие прочь SQLConneciton, что я использую с Database
части, которые дают мне достаточно упрощенных сообщения о том, что происходит. Я также регистрирую себя различными сообщениями через событие LogMessage(string)
, которое я создал.
Что бы я хотел сделать, это выполнить скрипты, чтобы продолжить, если есть ошибка, но все же регистрировать ошибку, не делая этого так, как я есть сейчас.
Причина в том, что некоторые ошибки, которые нарушают транзакции, тривиальны, и все в порядке, что они происходят. Подобно попытке создать индекс, если он существует или что-то-есть.
Есть ли способ продолжить выполнение сценария при ошибке, но все же записать сообщение об ошибке?
** Редактировать ** уточняющий за то, что два объекта, поступающие в
scriptInfo
является FileInfo
объект, который рассказывает StreamReader
где загрузить скрипт SQL с.
db
является SMO Database
объект, который связан с SQLClient.Connection
, что позволяет мне выполнить скрипт на базе данных, которая связана с db
Каротаж ошибка происходит на SqlClient.SqlConnections
OnInfo события, или из LogMessage
event
Хмм-образная модификация скриптов не является проблемой, мы используем CodeSmith для генерации большинства наших скриптов, используемых этой программой. Что делает последняя строка 'EXEC sp_help 't1''? (googling, но было бы хорошо с ответом). Также мы используем столько, сколько существует, если существует, как мы можем. – msarchet
Последняя строка только для того, чтобы показать, что скрипт работал, несмотря на ошибку. Команда sp_help показывает структуру, ограничения и индексы таблицы. – 8kb