需要针对执行存储过程进行事务回滚,因为是程序调用存储过程可能执行时网络中断,导致存储过程执行了一半,现在需要加上一个事务来控制这种异常情况的发生,事务用的比较浅,不知道下面这个存储过程能否满足我所说的情况?
另外能都实现限定执行该存储过程的时间,超过限定时间就报错事务回滚?
ALTER proc [dbo].[Test_shiwu]
as
begin set implicit_transactions on; -- 启动隐式事务 begin try
insert into shiwu (shiwu) values ('1');
insert into shiwu (shiwu) values ('2');
insert into shiwu (shiwu) values ('3');
insert into shiwu (shiwu) values ('4');
insert into shiwu (shiwu) values ('5');
insert into shiwu (shiwu) values ('6');
insert into shiwu (shiwu) values ('7');
insert into shiwu (shiwu) values ('8');
insert into shiwu (shiwu) values ('9');
insert into shiwu (shiwu) values ('10');
commit transaction;
end try
begin catch
select ERROR_NUMBER() as errornumber
rollback transaction; --回滚事务
end catch set implicit_transactions off; --关闭隐式事务 endSQL事务存储过程超时
另外能都实现限定执行该存储过程的时间,超过限定时间就报错事务回滚?
ALTER proc [dbo].[Test_shiwu]
as
begin set implicit_transactions on; -- 启动隐式事务 begin try
insert into shiwu (shiwu) values ('1');
insert into shiwu (shiwu) values ('2');
insert into shiwu (shiwu) values ('3');
insert into shiwu (shiwu) values ('4');
insert into shiwu (shiwu) values ('5');
insert into shiwu (shiwu) values ('6');
insert into shiwu (shiwu) values ('7');
insert into shiwu (shiwu) values ('8');
insert into shiwu (shiwu) values ('9');
insert into shiwu (shiwu) values ('10');
commit transaction;
end try
begin catch
select ERROR_NUMBER() as errornumber
rollback transaction; --回滚事务
end catch set implicit_transactions off; --关闭隐式事务 endSQL事务存储过程超时
EXEC sys.sp_configure N'query governor cost limit', N'300'
GO
RECONFIGURE WITH OVERRIDE
GO
这个存储过程只是一个例子,实际的存储过程里面insert、update等操作都有,还有游标循环处理,前台程序调用的时候可能会意外中断,导致我后台存储过程操作了一半,所以想加个事务来实现整个存储过程的回滚,另外担心调用执行时间过长,希望限定时间,比如30秒未执行完成就自动中断跳出并回滚,只是有这样的想法,不知道SQL怎么实习
预估的话这个效果不行,应该是在执行的时候如果执行时间达到30秒就自动报错回滚。另外选项里面设置应该是针对所有查询操作的,我需要的是特定某个查询超时报错
像我刚才说的你要再应用程序中设置,因为这个是Client端的设定而不是数据库。