| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 1502 人关注过本帖
标题:[求助]事务回滚保存点的问题
收藏  订阅  推荐  打印 
冰封情愁
Rank: 1
等级:新手上路
威望:1
帖子:32
积分:420
注册:2006-12-7

参考一下,如果有错,还请高手们指点.


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行数据生成成功'
end
commit tran tran_sincky

2007-3-27 23:54
flmls
Rank: 2
等级:注册会员
帖子:64
积分:740
注册:2007-2-6

楼上的我执行过了,好象也不行

我这个应该对了吧
begin tran begin_transaction
...
save tran save_transaction /*设置保存点*/
...
if (...)
begin
commit tran begin_transaction
end
else
begin
rollback tran save_transaction /*回滚到事务保存点*/
commit save_transaction
end

这下对了吧,斑竹.

2007-3-30 00:14
冰封情愁
Rank: 1
等级:新手上路
威望:1
帖子:32
积分:420
注册:2006-12-7

楼上的,对这段语句我有点不明白,
begin
rollback tran save_transaction /*回滚到事务保存点*/
commit save_transaction
end
其中的 commit save_transaction 语句会会被执行的?
如果楼主调试过,而且可以执行的话,麻烦回个话!!!

2007-3-30 12:28
dai77848400
Rank: 1
等级:新手上路
帖子:18
积分:308
注册:2008-6-20

我明白了  你后面那个IF ELSE 里面的多是一个复合语句 如果错误你回到用SAVE保存的地方  else 后面的语句就不回执行 你只要把那个ELSE 去了 他就会按顺序执行下面的语句 他几不回报错的
2008-6-29 15:55
dai77848400
Rank: 1
等级:新手上路
帖子:18
积分:308
注册:2008-6-20

我明白了  你后面那个IF ELSE 里面的多是一个复合语句 如果错误你回到用SAVE保存的地方  else 后面的语句就不回执行 你只要把那个ELSE 去了 他就会按顺序执行下面的语句 他几不回报错的

不要意思
上面的话还是有的点错误,你只要把那个COMMIT TRAN写到ELSE 外就OK了  我调试了 可以
2008-6-29 16:16
xrbbs
Rank: 1
等级:新手上路
帖子:1
积分:118
注册:2008-9-1

create procedure sinckypro
as
declare @i int,@j int
set @i=1
set @j=0
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
set @j=@j+@@rowcount
print @@rowcount
end
select * from sinckytab
if @j!=101
begin
print @j
print '100行数据生成失败'
rollback tran save_sincky /*回滚到事务开始, 当设置成rollback tran save_sincky 执行失败*/
end
else
begin
print '100行数据生成成功'
commit tran tran_sincky
end

exec sinckypro

上面是我帮你改的,可以运行了
@@rowcount返回受上一语句影响的行数 每一次都返回1不会返回所有影响的行数
2008-9-1 15:50
bb3852
Rank: 2
等级:注册会员
帖子:82
积分:1040
注册:2008-4-21

rollback后面加
commit tran save_sincky就可以了

http://hi.baidu.com/bb3852
数据库开发有兴趣的朋友们,里面有很多原创代码
qq:184882759
2008-9-2 13:57
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.057276 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved