SQL. Безопасная разработка на MS SQL (try catch)
Безопасная разработка на SQL
Используйте try catch для отлова ошибок. Общий шаблон:
begin try
select 6/0
end try
begin catch
exec [dbo].[as_error] @str = 'My message'
end catch
Функция as_error логирует ошибку в as_trace (и она выводится на дашборде Админа). Помимо сообщения в ней выводятся системные данные об ошибке - строка, процедура, код ошибки
Локализация места где было исключение
Если в процедуре есть множество вызовов функций и sql процедур, то можно найти хранимую процедуру, в которой было исключение (для функций это не работает).
BEGIN TRY
exec dbo.p3
--select dbo.f3('')
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
В примере в p3 вызывается процедура p2, а в p2 вызывается p1, где идет ошибка деления на 0.

Если сделать аналогично для функий, то в catch мы не сможем получить ту функцию, в которой непосредственно происходит ошибка.
Что еще посмотреть по SQL Server
Как форматировать код sql в sql server management studio
Как искать зависимости объектов в SQL Server
Как кешировать в SQL результаты сложных операций
SQL Server. Как вызвать процедуру с переменным именем и результаты вставить в таблицу
Формирование сложного JSON объекта через SELECT в SQL Server
Как вставить данные в таблицу БД из таблицы на другом сервере
Использование CPU в SQL Server Express Edition
Альтернатива множественному Replace
Разбор строки на части и занесение в табличную переменную
SQL. Быстрый поиск хранимых процедур и таблиц в ManagementStudio
Дополнительный заработок для разработчиков на T-SQL
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта