我在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
答案 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