首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL的回滚解决思路

2012-03-31 
SQL的回滚例如 物品领用:表TB1IDD_nameSNO1帽子23我插入一条数据到TB2表IDD_nameSNO1帽子6我想先插入一条

SQL的回滚
例如 物品领用:表TB1 

ID D_name SNO

1 帽子 23

我插入一条数据到TB2表 
ID D_name SNO

1 帽子 6

我想先插入一条数据到TB2表,成功了再更新TB1表 TB1表若更新失败 则回滚

我没写过回滚 谢谢

[解决办法]
begin tran

insert into TB2 ....

update TB1....

if @@error<>0
rollback
else
commit
[解决办法]

SQL code
开始一个显式事务,向表中插入一条数据,定义一个保存点 s1,向表中再插入一条数据,定义一个表存点s2,向表中再插入一条数据,回滚到保存点s1,向表中再插入一条数据,提交事务,查询表中数据。begin transactioninsert into student values ('104','四四',2);save transaction s1;insert into student values ('105','Tina',2);save transaction s2;insert into student values ('106','李四',1);rollback transaction s1;insert into student values ('107','Rose',2);commit select * from student;参考
[解决办法]
SQL code
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOcreate PROCEDURE [dbo].[csstsale_add_user] @username varchar(50),  @passwords varchar(50),@othername varchar(50) ,@depart varchar(50)     as   DECLARE   @mdpaswd   varchar ( 34 )   begin tran /*开始事务*/  if  ((select COUNT(1) from tb_user where username=@username )>0)   print '您插入的用户名系统已经存在!'    else              select @mdpaswd=[dbo].[MD5](@passwords,32)     insert into tb_user (username,passwords,othername,depart)     values(@username,@mdpaswd,@othername,@depart)        /*如果上面操作中有一次失败了,那么回滚事务,即让两次操作都不生效*/if @@error!=0begin   rollback tran   print '新建用户失败'endelse/*如果没有错误,则提交事务!*/begincommit tranend
[解决办法]

create PROCEDURE [dbo].[testHuiGun] 
@id varchar(9),
@d_name varchar(50)
as 
begin
begin try
begin tran
insert into mailss values(@id,@d_name)
update MailKey set zhuangtai='2' where id=@id
if(@@ROWCOUNT<=0)
begin
rollback;
end
else
begin
commit tran
end
end try
begin catch
rollback
end catch
end


我这测试没有问题呀

热点排行
Bad Request.