RAISEERROR日期和时间

时间:2014-04-24 12:50:11

标签: sql sql-server sql-server-2008

我在TRY ... CATCH中长期运行sql语句。

BEGIN CATCH
    DECLARE @ErrorMsg = ERROR_MESSAGE(),@ErrSevirity = Error_Sevirity()
    RAISEERROR(@ErrorMsg , @ErrSevirity , 1)     
    --do rollback
END CATCH

我知道存储过程失败的时间,我如何收到错误消息? sysmessages没有日期时间字段,有什么方法可以将它加入到其他表中以获取错误日期和时间?

select * from master.dbo.sysmessages

2 个答案:

答案 0 :(得分:0)

我用它来跟踪SP执行步骤时间:

IF @diagbit = 1
BEGIN
SET @timestamp = 'Main Table Created - '+CAST(CAST(GETDATE() as TIME) as VARCHAR(20))
RAISERROR (@timestamp, 0,1) WITH NOWAIT
END

所以对你来说就是:

@ErrorMsg = ERROR_MESSAGE() + CAST(CAST(GETDATE() as TIME) as VARCHAR(20)) ,@ErrSevirity = Error_Sevirity()

或类似的东西。

答案 1 :(得分:0)

在Catch块中使用RAISERROR()函数没有多大意义,这可以在TRY BLock中用于进入Catch Block

一旦您(您的控件)处于Catch块中,您就拥有了所有错误函数,以获取有关错误的详细信息。只需选择它们的功能。

在try块中使用Raiserror函数。一旦在try块中引发错误,ERROR_MESSAGE()将填充您的自定义错误消息。

见下文:

BEGIN TRY
       -- Pre validation 
         IF (Some COndition)
         BEGIN
             RAISERROR('Your Customer Error message', 16,1) 
         END
BEGIN TRANSACTION 

   /* Your Code here  */

COMMIT TRANSACTION

END TRY

BEGIN CATCH
 IF (@@TRANCOUNT > 0)
  BEGIN
    ROLLBACK TRANSACTION;
  END

   -- Do your Error logging 
   SELECT ERROR_MESSAGE()  AS ErrorMessage
         ,ERROR_LINE()     AS ErrorLine 
         ,ERROR_SEVERITY() AS ErrorSeverity 
         ,GETDATE()        AS Error_DateTime

END CATCH