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

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-3-21 20:24
棉花糖ONE
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:32
帖子:2987
积分:30026
注册:2006-7-13

因为你rollback tran save_sincky之后,begin transaction tran_sincky就没存在对应的rollback或者commit

26403021 sql群 博客 blog.bc-cn.net/user15/81152/index.shtml
2007-3-22 00:23
flmls
Rank: 2
等级:注册会员
帖子:64
积分:740
注册:2007-2-6

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

2007-3-22 00:34
Kendy123456
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:62
帖子:2694
积分:27044
注册:2007-1-3

每一个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-3-22 09:22
flmls
Rank: 2
等级:注册会员
帖子:64
积分:740
注册:2007-2-6

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

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

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-3-26 21:38
棉花糖ONE
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:32
帖子:2987
积分:30026
注册:2006-7-13

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


26403021 sql群 博客 blog.bc-cn.net/user15/81152/index.shtml
2007-3-26 21:57
flmls
Rank: 2
等级:注册会员
帖子:64
积分:740
注册:2007-2-6

还是不是很明白,
当 print '100行数据生成失败'
rollback tran tran_sincky

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

为什么,总是错误呢
2007-3-26 22:46
棉花糖ONE
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:32
帖子:2987
积分:30026
注册:2006-7-13


26403021 sql群 博客 blog.bc-cn.net/user15/81152/index.shtml
2007-3-26 22:48
flmls
Rank: 2
等级:注册会员
帖子:64
积分:740
注册:2007-2-6

斑竹,是不是不能执行这个效果?
2007-3-26 22:52
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

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