如何在sql语句执行期间发生错误时获取错误描述

时间:2014-12-09 09:02:18

标签: sql-server sql-server-2008

我正在使用SQL Server 2008并编写一个存储过程,用于在表中插入和更新记录。此过程将安排一段时间。每当出现错误时,我都会在另一个表中记录该错误。但我需要实际的错误信息,但无法得到相同的信息。

我用过这个:

SET @ErrNum = @@ERROR
SET @ErrMsg = ERROR_MESSAGE()

但我的问题是我没有收到实际的错误消息。我能够得到错误号。

请建议在执行SQL语句后从SQL Server提示符处获取实际消息需要做什么。

2 个答案:

答案 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那样自己处理错误:

使用@@ ERROR检测特定错误

USE AdventureWorks2012;
GO
UPDATE HumanResources.EmployeePayHistory
    SET PayFrequency = 4
    WHERE BusinessEntityID = 1;

IF @@ERROR = 547
   PRINT N'A check constraint violation occurred.';
GO