Могут ли блоки SQL Try-Catch обрабатывать возникающие ошибки CLR?
-
02-07-2019 - |
Вопрос
Мы используем SQL 2005 и функцию try-catch для обработки всех ошибок в базе данных.В настоящее время мы работаем над развертыванием функции .NET CLR для выполнения некоторых вызовов WCF в БД.Эта процедура WCF записывается в среде CLR, а затем развертывается в SQL.Если я добавлю блок try-catch в код CLR, он отлично отловит ошибку.Однако я не могу передать ошибку в блок try-catch в SQL.SQL, похоже, игнорирует то, что я ему выдаю, и перехватывает найденную ошибку.Нет ли между ними никакой связи (т.Я не могу перекинуться с одного на другое?)
Если я могу выполнить вызов из CLR в вызывающую процедуру в SQL, нужно ли какое-либо специальное форматирование?Я попробовал конкретный случай перехвата выданной ошибки, а затем выдачу другой ошибки, но SQL проигнорировал мою выброшенную ошибку и перехватил исходную ошибку, как если бы он игнорировал выброшенную ошибку.
Решение
Вот сообщение в блоге, которое освещает это на высоком уровне:Обработка исключений в SQLCLR
Когда SQL-сервер выполняет пользовательскую функцию/процедуру/триггер, реализованную в CLR (т. е. управляемый код), мы устанавливаем управляемый обработчик исключений вокруг пользовательского кода.Таким образом, если пользовательский код выдал исключение, сервер перехватит его и выдаст исключение TSQL, обертывающее пользовательское исключение.
Кажется, это означает, что это просто сработает.