我正在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行受影响)
结果
(1行受影响)
答案 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)