在循环中使用事务的问题

zzd 2002-06-11 12:15:59
OPEN BaseInfo_cursor -- 打开游标,共2条记录
FETCH NEXT FROM BaseInfo_cursor INTO ... -- 取字段值
WHILE @@FETCH_STATUS = 0 -- 取游标状态 0-成功
BEGIN
select @PoolSql = .....
select @MyErr = 0
begin transaction @TransName
Execute(@PoolSql) -- 有错误
Select @MyErr = @MyErr + @@error
update BookBaseInfo set Valid = 0 where ... -- 无错误
Select @MyErr = @MyErr + @@error
if @MyErr <>0
rollback transaction @TransName
else
commit transaction @TransName
FETCH NEXT FROM BaseInfo_cursor INTO... -- 取下一条记录字段值
END

整个循环应该执行两次,第一次出现错误,回滚,第二次循环内容就不执行了,什么原因呢?各位大侠帮助分析一下。
...全文
230 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2002-06-12
  • 打赏
  • 举报
回复
我试了,可以的
是不是你的游标记录指针有问题,按tj_dns(愉快的登山者)说的试试
qybao 2002-06-12
  • 打赏
  • 举报
回复
用查询分析器测试看看
DECLARE @ii int
SELECT @ii = 0
WHILE @@FETCH_STATUS = 0 -- 取游标状态 0-成功
BEGIN
select @PoolSql = .....
select @MyErr = 0
begin transaction @TransName
Execute(@PoolSql) -- 有错误
Select @MyErr = @MyErr + @@error
update BookBaseInfo set Valid = 0 where ... -- 无错误
Select @MyErr = @MyErr + @@error
select @ii = @ii+1
pring @ii='+CONVERT(varchar(10),@ii)
if @MyErr <>0
begin
print '@MyErr='+CONVERT(varchar(10),@MyErr)
rollback transaction @TransName
end
else
commit transaction @TransName
FETCH NEXT FROM BaseInfo_cursor INTO... -- 取下一条记录字段值
END
看看@ii的值和@MyErr的值就知道你的循环是否执行了
gzhughie 2002-06-11
  • 打赏
  • 举报
回复
你的第二次是不执行还是也回滚了
zzd 2002-06-11
  • 打赏
  • 举报
回复
第二次是不执行,在循环体中有一句select @n = @n+1,在不加事务处理的时候,执行后,循环体外@n=2;加事务处理之后,执行后,循环体外@n=1
愉快的登山者 2002-06-11
  • 打赏
  • 举报
回复
第一个
FETCH NEXT FROM BaseInfo_cursor INTO ... -- 取字段值
改为
FETCH First FROM BaseInfo_cursor INTO ... -- 取字段值

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧