Почему ERROR_MESSAGE () всегда нулевой? - PullRequest
6 голосов
/ 19 мая 2011

Я пишу хранимую процедуру в SQL Server 2008. Проблема в том, что параметр @ErrorMessage out всегда пуст. Похоже, это связано с функцией ERROR_MESSAGE (), потому что, когда я избавляюсь от этого, возвращается другая часть сообщения.

Как я могу получить полное сообщение об ошибке?

-- Log transaction
        INSERT INTO Transactions (TxnId, TypeId, [Date], Amount)
                                    VALUES(@TxnId, @TypeId, @TransDate, @Amount)

        -- Check for errors
        IF @@ERROR <> 0
        BEGIN
            PRINT 'Starting third error block'

                SET @ErrorCode = 202
            SELECT @ErrorMessage = 'Err_TxnId_Exists - Error inserting: ' + ERROR_MESSAGE()

            PRINT @ErrorCode
            PRINT @ErrorMessage
            PRINT 'Ending third error block'

            RETURN 1
        END 

Вывод сообщений

Заявление было прекращено. Начало третьего блока ошибок 202

Окончание третьего блока ошибки

(затронут 1 ряд)

Результаты

  • @ ErrorCode = 202
  • @ ErrorMessage = null

(затронут 1 ряд)

Ответы [ 3 ]

14 голосов
/ 19 мая 2011

ERROR_MESSAGE () действительна только внутри блока CATCH.

Дайте этому шанс:

BEGIN TRY
    INSERT INTO Transactions (TxnId, TypeId, [Date], Amount)                                     
    VALUES (@TxnId, @TypeId, @TransDate, @Amount)
END TRY
BEGIN CATCH
        SET @ErrorCode = 202              
        SET @ErrorMessage = ERROR_MESSAGE()
        PRINT @ErrorCode              
        PRINT @ErrorMessage    
END CATCH;
2 голосов
/ 19 мая 2011

Я полагаю, вы используете функцию ERROR_MESSAGE() с TRY...CATCH блоками. Проверьте использование .

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