У меня есть хранимая процедура, которая вызывает другую хранимую процедуру. В пакете обновления 2 есть попытка / транзакция / отлов / откат / raiserror. Если SP2 вызывает ошибку, будет ли он пузыриться через SP1 для вызывающего абонента, или я должен также вкладывать вызов SP2 в try / catch? Если последнее имеет место, как я могу убедиться, что я не убиваю «трассировку стека» ошибки из SP2 при поднятии / выходе из SP1?
- будет ли этот пузырь сообщать об ошибке SP2 и также выходить из SP1?
EXEC dbo.storedProc2 @someParameter = @someValue
- Или мне нужно это сделать?
BEGIN TRY
EXEC dbo.storedProc2 @someParameter = @someValue
END TRY
BEGIN CATCH
-- this is what I normally do in a simple catch/raise scenario:
-- will it kill the error stack?
DECLARE @ErrMsg VARCHAR(4000), @ErrSeverity INT, @ErrState INT, @ErrLine INT
SELECT @ErrMsg = ERROR_MESSAGE() + ' Line %d',
@ErrSeverity = ERROR_SEVERITY(),
@ErrState = ERROR_STATE(),
@ErrLine = ERROR_LINE()
RAISERROR(@ErrMsg, @ErrSeverity, @ErrState, @ErrLine)
END CATCH