Sql Server 2008 Try Catch Error collection - PullRequest
       0

Sql Server 2008 Try Catch Error collection

0 голосов
/ 20 апреля 2011

Я хочу получить коллекцию ошибок, вызванных хранимой процедурой, из внешней хранимой процедуры. Есть ли способ получить это.

Образцы ниже. Я получаю первую ошибку 80125. Я также хотел бы получить информацию о второй 80054. Есть ли в sql server переменная коллекции или сервера (я знаю, как получить это из .Net)


BEGIN TRY

DECLARE @RC int

EXEC @RC= TestErrorProc

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

- дает следующее 80125 15 1 TestErrorProc 11 Пользовательская ошибка базы данных: процедура: PROCEDURENAME; Пользователь: ДБО; Рабочая станция: VENTURE - Устранение неоднозначных ошибок - Следующая ошибка была вызвана пятым потенциально недопустимым параметром


CREATE PROCEDURE [dbo].[TestErrorProc]

AS

    DECLARE @intErr int, @intRows int, @strUser varchar(64), @strWks varchar(64)

    DECLARE @strTraceMsg varchar(255)

    DECLARE @intRet int

    SELECT @strUser = USER_NAME(), @strWks = HOST_NAME()

    SET @strTraceMsg = ' Row 1'

       BEGIN

       --Ambiguous Testing

        RAISERROR( 80125, 15, 1, 'PROCEDURENAME', @strUser, @strWks, 'TABLENAME-Column information' )
          RAISERROR( 80054, 15, 1, 'PROCEDURENAME', @strUser, @strWks, @strTraceMsg, 'Issue details - business Error' )

        RETURN( -100 )

      END

1 Ответ

1 голос
/ 21 апреля 2011

Это невозможно без дополнительного кода - после появления первой ошибки внутренняя процедура завершается и выполняется код в блоке CATCH.

Если вам нужно перехватить несколько ошибокперед возвратом их во внешний код одним из решений было бы написать более сложную обработку ошибок во внутренней процедуре, заключив каждую ошибку в свой собственный блок TRY...CATCH и вставив ошибку (и) во временную таблицу, прежде чем выдать новую ошибкувернуть управление внешнему коду, который может извлекать и отображать содержимое временной таблицы.Этот подход должен работать, но, вероятно, его будет довольно сложно поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...