Если вы контролируете как хранимую процедуру, так и код, выполняющий хранимую процедуру, то другой альтернативой, которую мы широко используем, является использование параметра хранимой процедуры OUTPUT для возврата кодов ошибок вызывающей стороне (т. Е. @ErrorCode INT = 0 ВЫХОД).
На мой взгляд, это имеет несколько преимуществ по сравнению с ошибками:
1) Обработка исключений - очень дорогая операция в .net framework. Если все, что вам нужно, - это сообщить пользователю, что что-то не так с введенными ими данными или конфликт в базе данных, возвращение кода ошибки будет иметь гораздо меньшее влияние на производительность приложения и сервера, чем выбрасывание и ловля исключений.
2) Если ваша процедура сделала это достаточно далеко при обработке, вы можете заполнить другие параметры. Например, если вам нужно включить информацию о том, у какого пользователя заблокирована запись, вы можете включить эту информацию в другой выходной параметр и построить свое сообщение об ошибке в коде.
3) С помощью этого метода легче поддерживать интернационализацию или настройку сообщений, чем с помощью сообщений об ошибках, закодированных в хранимых процедурах.