Здравствуйте, у меня есть расширенная хранимая процедура, которая отправляет сообщение об ошибке.
srv_sendmsg(pSrvProc, SRV_MSG_ERROR, errorNum, SRV_FATAL_SERVER, 1,
NULL, 0, (DBUSMALLINT) __LINE__,
buff,
SRV_NULLTERM);
Я установил уровень серьезности в SVR_FATAL_SERVER просто для проверки, могу ли я заставить сообщение выдать исключение в sql.
В моем SQL я делаю:
BEGIN TRY
EXEC dbo.xp_somethingCool
SET @Error = @@ERROR
END TRY
BEGIN CATCH
PRINT 'AN Error occoured!'
SELECT ERROR_NUMBER() AS ErrorNumber
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH
Я бы подумал, что когда мой xp отправит сообщение об ошибке, tsql перехватит ошибку и выберет error_number и error_message. Вместо этого происходит то, что xp отправляет сообщение, а T-SQL продолжает свой путь, как будто ничего не произошло. Переменная @@ Error также не устанавливается.
Так что мне было интересно, есть ли какой-нибудь трюк, чтобы заставить SQL ловить ошибку из XP?
Спасибо,
Raul