我创建了一个存储过程,在汇总表中有9个插入,最后一个语句是删除。
此过程大约需要9分钟才能执行每个给定日期,我注意到的一件事是,如果发生错误并执行前3个插入,则会保留插入的数据。为了解决这个问题,我创建了一个开始尝试并开始事务,我做的测试是使用SSMS启动过程,在启动之后,我取消了命令,但事务被保留了。我怎么能避免这个?
程序正文非常简单......如:
insert into...
insert into...
insert into...
insert into...
insert into...
insert into...
insert into...
insert into...
insert into...
insert into...
delete from....
感谢
答案 0 :(得分:0)
两件事:
1)基本语法是:
BEGIN TRY
BEGIN TRAN
INSERT...
DELETE...
COMMIT TRAN
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRAN
END
DECLARE @ErrorMessage NVARCHAR(4000)
SET @ErrorMessage = 'Line ' + CONVERT(VARCHAR(20), ERROR_LINE()) + ': '
+ ERROR_MESSAGE()
RAISERROR(@SQLErrString, 16, 1)
END CATCH
2)如果取消正在进行的批处理,则可能需要手动运行ROLLBACK TRAN。您可以通过执行SELECT @@ TRANCOUNT测试是否需要执行此操作,如果它是> 0然后调用ROLLBACK TRAN。