日期:2014-05-18 浏览次数:20736 次
--用@@error判断错误,如果是严重错误,根本不会执行rollback tran语句,系统会自动中止执行。 --建议用格式类似如下方式使用事务: set xact_abort on begin tran .... commit tran
------解决方案--------------------
SET NOCOUNT ON SET XACT_ABORT ON DECLARE @s_scddh varchar(12),@s_sxh int DECLARE sk_temp CURSOR FOR SELECT scddh,sxh FROM #temp_sk ORDER BY sxh OPEN sk_temp FETCH NEXT FROM sk_temp INTO @s_scddh,@s_sxh WHILE @@FETCH_STATUS = 0 BEGIN SELECT scddh FROM erp_pp_a WHERE scddh = @s_scddh and (gxmc = 'AA') IF @@ROWCOUNT = 0 BEGIN BEGIN Tran myTran insert into erp_pp_bg_pr_e(scddh,gxmc,sxh,user_name) values (@s_scddh,'AA',@s_sxh+5, '补数') COMMIT Tran END FETCH NEXT FROM sk_temp INTO @s_scddh,@s_sxh END CLOSE sk_temp DEALLOCATE sk_temp GO
------解决方案--------------------
SET XACT_ABORT {ON ¦OFF}
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。
为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。
如果没有对 SET XACT_ABORT {ON ¦OFF} 进行设置,默认情况是ON还是OFF??
OFF!