首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

游标中事务控制的方法

2012-03-26 
求一个游标中事务控制的方法.declaremy_curcursorforselecta,b,c,dfromtblopenmy_curfetchnextfrommy_curi

求一个游标中事务控制的方法.
declare   my_cur   cursor   for
        select   a,b,c,d   from   tbl
    open   my_cur
    fetch   next   from   my_cur   into   @a,@b,@c,@d
    while   @@fetch_status=0
    begin
        insert   into   tbl_tmp   (a,b,c,d)values(@a,@b,@c,@d)
        fetch   next   from   my_cur   into     @a,@b,@c,@d
    end
    close   my_cur
    deallocate   my_cur

    update   tbl_test   set   flag=1   where   a=@a
---------------------------
以上就要需在过程里面实现的内容.要达到的目的如下:
1.该过程执行中,不允许其它用户执行此过程.
2.执行过程中,只要有错误,全部回滚.(不能是回滚出错语句,继续执行下面语句)

[解决办法]
1、在开始执行后,可以在某个表中做个标志,其他用户在开始执行前,先检查是否有人在执行,如果有人在执行,则等待。


2、如下:

set xact_abort on --设置事务中任一SQL出错,回滚整个事务

begin tran --开始事务

declare my_cur cursor for
select a,b,c,d from tbl

open my_cur
fetch next from my_cur into @a,@b,@c,@d

while @@fetch_status=0
begin
insert into tbl_tmp (a,b,c,d)values(@a,@b,@c,@d)
fetch next from my_cur into @a,@b,@c,@d
end

close my_cur
deallocate my_cur

update tbl_test set flag=1 where a=@a


commit tran --提交事务

[解决办法]
mark
[解决办法]
一樓正解

热点排行