Когда сообщение об ошибке возвращается sp_executesql
, есть ли какой-либо встроенный метод / механизм обработки ошибок, который можно использовать для определения того, что эта ошибка была возвращена этой процедурой, а не непосредственно из содержащего сценария?
В случае ниже, подробности ошибки идентифицируют ошибку как возникшую в строке 1, но они не указывают, что ссылка на строку 1 не строка 1 из сценариясама , а точнее строка 1 в запросе, переданном сценарием на sp_executesql
.
Я ищу способ идентифицировать источник, чтобы я мог соответствующим образом его зарегистрировать.Я хотел бы записать что-то вроде Script x - Call to inner query errored on that query's line 1
вместо общего (и вводит в заблуждение) Script x errored on line 1
.
Демо
-- do other things first
BEGIN TRY
EXECUTE sp_executesql @stmt = N'SELECT 1/0';
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;
Возвращает:
ErrorNumber ErrorSeverity ErrorState ErrorProcedure
----------- ------------- ----------- ---------------
8134 16 1 NULL