代码如下: begin tran
update Emp set Age=Age+1 where Code=1 if(select Age from Emp where Code=1)>35
begin
print '事务回滚'
rollback tran
end
else
begin
print '事务成功执行'
commit tran
end
执行好后,我关闭sqlserver2005时,就出现
有未提交的事务,是否要在关闭窗口之前提交这些事务。
可是在SqlServer2000 中不会出现啊,为什么??
update Emp set Age=Age+1 where Code=1 if(select Age from Emp where Code=1)>35
begin
print '事务回滚'
rollback tran
end
else
begin
print '事务成功执行'
commit tran
end
执行好后,我关闭sqlserver2005时,就出现
有未提交的事务,是否要在关闭窗口之前提交这些事务。
可是在SqlServer2000 中不会出现啊,为什么??
解决方案 »
- 关于Asp.net【字符串与数值】的转换问题?简单!
- Session中存放对象问题!
- asp.net 跳转页面刷新问题。在线等待!
- 为什么C#提示 CS0246: 找不到类型或命名空间名称
- 我用sql语句查处一组记录,并且赋给了dataset 但是我还需要重新group by一下,请问如何实现?
- 窗体打印问题
- 我想要个简单的在线编辑网页的功能(C#,asp.net实现),谁有写好的代码或者知道哪里有下载的代码,高分赠送!
- 关于自定义控件!!!
- ASP.NET网站乱码
- 怯怯地问一句:我下载的TreeView怎么只有360k呀?
- GridView1_RowDataBound没被触发
- 点击button按钮 页面为空
没少啊!第一个begin是说明开始事务,不需要end,对应的是commit tran
update Emp set Age=Age+1 where Code=1
save tran aabb
update Emp2 set Age=Age+1 where Code=1
if(select Age from Emp2 where Code=1)>35
begin
print '回滚一部分事务'
rollback tran aabb
end
else
begin
print '事务成功执行'
commit tran
end
那这段代码怎么改啊!begin tran
update Emp set Age=Age+1 where Code=1 save tran aabb
update Emp2 set Age=Age+1 where Code=1
if(select Age from Emp2 where Code=1)>35
begin
print '回滚一部分事务'
rollback tran aabb
end
else
begin
print '事务成功执行'
commit tran
end
if(select Age from Emp where Code='1')>35 select Age from Emp where Code='1' 这条语句在这里会执行吗?不需要exec 或 cmd.executescalar?
update Emp set Age=Age+1 where Code=1save tran aabb
update Emp2 set Age=Age+1 where Code=1
if(select Age from Emp2 where Code=1)>35
begin
print '回滚一部分事务'
rollback tran aabb --这里只是回滚到了aabb标签处,前面的事务还未提交 commit tran --这里才是处理最开始的事务.
end
else
begin
print '事务成功执行'
commit tran
end
参考
Create proc RegisterUser
(@usrName varchar(30), @usrPasswd varchar(30),@age int,@sex varchar(10), @PhoneNum varchar(20), @Address varchar(50) )
as begin
begin tran
insert into userinfo(userName,userPasswd) values(@usrName,@usrPasswd)
if @@error<>0
beginrollback tranreturn -1
end
insert into userdoc(userName,age,sex,PhoneNumber,Address)values(@Usrname,@age,@sex,@PhoneNum,@Address)
if @@error<>0
beginrollback tran
return -1
endcommit tran
return 0
end
begin tran
update Emp set Age=Age+1 where Code=1save tran aabb
update Emp2 set Age=Age+1 where Code=1
if(select Age from Emp2 where Code=1)>35
begin
print '回滚一部分事务'
rollback tran aabb --这里只是回滚到了aabb标签处,前面的事务还未提交
end
else
begin
print '事务成功执行'
commit tran aabb
end
commit tran --这里才是处理最开始的事务.
Begin tran
update Emp set Age=Age+1 where Code=1 if exists (select 1 from Emp where Code=1 and Age > 35)
begin
print '事务回滚'
rollback tran
end
else
begin
print '事务成功执行'
commit tran
end 你這樣的寫法 if(select Age from Emp where Code='1')>35
假如code='1'查出的不是1笔记录(查不到,或者多余1笔),那就报错了
也就下面的rollback和commit都执行不到。。 begin tran
update Emp set Age=Age+1 where Code=1 if(select Age from Emp where Code=1)>35
begin
print '事务回滚'
rollback tran
end
else
begin
print '事务成功执行'
end commit tran --这里commit