我正在使用SQL Server 2008并编写一个存储过程,用于在表中插入和更新记录。此过程将安排一段时间。每当出现错误时,我都会在另一个表中记录该错误。但我需要实际的错误信息,但无法得到相同的信息。
我用过这个:
SET @ErrNum = @@ERROR
SET @ErrMsg = ERROR_MESSAGE()
但我的问题是我没有收到实际的错误消息。我能够得到错误号。
请建议在执行SQL语句后从SQL Server提示符处获取实际消息需要做什么。
答案 0 :(得分:0)
ERROR_MESSAGE()应该可以做到这一点。
BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH;
答案 1 :(得分:0)
这对您正在做的事情有效。在所有脚本中,您都可以看到类似的内容
DECLARE @ErrorMessage nvarchar(max)
DECLARE @ErrorMessageOriginal nvarchar(max)
DECLARE @Error int
DECLARE @ReturnCode int
SET @Error = 0
SET @ReturnCode = 0
SET @Error = ERROR_NUMBER()
SET @ReturnCode = @Error
SET @ErrorMessageOriginal = ERROR_MESSAGE()
SET @ErrorMessage = 'Msg ' + CAST(@Error AS nvarchar) + ', ' + ISNULL(@ErrorMessageOriginal,'')
RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
但是你想要像MSDN source那样自己处理错误:
USE AdventureWorks2012;
GO
UPDATE HumanResources.EmployeePayHistory
SET PayFrequency = 4
WHERE BusinessEntityID = 1;
IF @@ERROR = 547
PRINT N'A check constraint violation occurred.';
GO