为什么ERROR_MESSAGE()始终为空?

cho*_*obo 6 t-sql stored-procedures sql-server-2008

我正在sql server 2008中编写存储过程.问题是@ErrorMessage out参数始终为null.它似乎与ERROR_MESSAGE()函数有关,因为当我摆脱它时,返回消息的其他部分.

如何让它返回整个errorMessage?

-- 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 
Run Code Online (Sandbox Code Playgroud)

消息输出

该语句已终止.启动第三错误块202

结束第三个错误块

(1排受影响)

结果

  • @ErrorCode = 202
  • @ErrorMessage = null

(1排受影响)

Fos*_*sco 14

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;
Run Code Online (Sandbox Code Playgroud)