| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3630 人关注过本帖
标题:[求助]事务回滚保存点的问题
只看楼主 加入收藏
flmls
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-2-6
收藏
 问题点数:0 回复次数:16 
[求助]事务回滚保存点的问题

create procedure sinckypro
as
declare @i int
set @i=1
begin transaction tran_sincky
create table sinckytab(
myid int not null,
myname varchar(10),
mtdesc varchar(50))
save tran save_sincky /*设置保存点*/
while @i<=101
begin
insert into sinckytab values(@i,'sincky','come from 51testing')
set @i=@i+1
end
select * from sinckytab
if @@rowcount!=100
begin
print '100行数据生成失败'
rollback tran tran_sincky /*回滚到事务开始, 当设置成rollback tran save_sincky 执行失败*/
end
else
begin
print '100行数据生成成功'
commit tran tran_sincky
end

exec sinckypro

有个问题:
我是设置101次循环,把事务回滚设置成事务开始rollback tran tran_sincky,执行语句,显示“100行数据生成失败”
当我把回滚语句设置成rollback tran save_sincky时候,执行失败
错误提示是:EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。

搜索更多相关主题的帖子: 事务 sincky tran begin int 
2007-03-21 20:24
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 
因为你rollback tran save_sincky之后,begin transaction tran_sincky就没存在对应的rollback或者commit

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-22 00:23
flmls
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-2-6
收藏
得分:0 

是不是,还需要编写语句
rollback tran save_sincky(对应的rollbaek是不是还要返回到save_sincky吗)
commit tran save_sincky

2007-03-22 00:34
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
每一个begin tran都有对应commit或者 rollback

begin transaction tran_sincky
。。。
save tran save_sincky /*设置保存点*/
。。。
if @@rowcount!=100
begin
print '100行数据生成失败'
rollback tran save_sincky /*回滚到事务开始, 当设置成rollback tran save_sincky 执行失败*/
end
else
begin
print '100行数据生成成功'
commit tran tran_sincky
end

看明白了? 当失败时 tran_sincky这个事务并没有对应的commit rollback语句可以执行 事务不能结束

2007-03-22 09:22
flmls
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-2-6
收藏
得分:0 

明白点了,应该对save_sincky有个对应的commit rollback
但不知道加那里
应该怎么改下啊,求解

2007-03-23 13:40
flmls
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-2-6
收藏
得分:0 
egin transaction tran_sincky
。。。
save tran save_sincky /*设置保存点*/
。。。
if @@rowcount!=100
begin
print '100行数据生成失败'
rollback tran save_sincky /*回滚到事务开始, 当设置成rollback tran save_sincky 执行失败*/
commit tran save_sincky

end
else
begin
print '100行数据生成成功'
commit tran tran_sincky
end

是不是加一句“commit tran save_sincky”,请指教
2007-03-26 21:38
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 

你那里都rollback了,后面的是不会执行了啦,加后面没用了


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-26 21:57
flmls
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-2-6
收藏
得分:0 
还是不是很明白,
当 print '100行数据生成失败'
rollback tran tran_sincky

语句回滚到 保存点tran_sincky后,效果应该是,事务回滚,保存点前面建立表的语句成功执行,而保存点后的语句取消

为什么,总是错误呢
2007-03-26 22:46
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-26 22:48
flmls
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-2-6
收藏
得分:0 
斑竹,是不是不能执行这个效果?
2007-03-26 22:52
快速回复:[求助]事务回滚保存点的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012462 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved