为什么ERROR_MESSAGE()始终为空?

时间:2011-05-19 18:18:54

标签: tsql sql-server-2008 stored-procedures

我正在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 

消息输出

该声明已被终止。 启动第三个错误块 202

结束第三个错误块

(1行受影响)

结果

  • @ErrorCode = 202
  • @ErrorMessage = null

(1行受影响)

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

我相信您将ERROR_MESSAGE()功能与TRY...CATCH块一起使用。查看usage

答案 2 :(得分:0)