Общее правило, которое применяется здесь, заключается в том, чтобы перехватить ошибку как можно ближе к источнику. SQL Server теперь имеет синтаксис перехвата ошибок «try ... catch ...». Так что используйте это. Затраты на добавление небольшого количества дополнительного кода незначительны, и если в вашем SP есть несколько операторов, вы можете адаптировать строку в RAISERROR, чтобы помочь локализовать проблему.
В интерфейсе не должно быть затруднений перехватывать событие ошибки SP и обрабатывать его так же, как вы обрабатываете перехват других ошибок в процедурном коде.
Это одна из наиболее игнорируемых «лучших практик» в хранимых процедурах, и она даже важнее, чем в «обычном» коде, потому что сложнее использовать пошаговый отладчик.
Один полезный шаблон - обрабатывать это в вашем SP так же, как вы ожидаете, что он будет обрабатываться в любой другой непрозрачной библиотеке SDK.