请教大家一个关于事务管理,我不会用呀!!!(20分)

  • 主题发起人 主题发起人 yuanyoufa
  • 开始时间 开始时间
Y

yuanyoufa

Unregistered / Unconfirmed
GUEST, unregistred user!
DECLARE @JF DECIMAL(10,2),@SY decimal(10,2),@string char(10)
select @string=(select count(*) from jifensc where riqi<convert(char(10),dateadd(month,-6,getdate()),120)and kkhcode='0001')
if @string>0
begin
delete jifensc where riqi<convert(char(10),dateadd(month,-6,getdate()),120)and kkhcode='0001'
end
/*1.删除超过六个月的记录*/
insert into jifensc (kkhcode,riqi,jifen) values ('0001','2006-06-02',4)
/*2.增加记录*/
SELECT @JF=(select sum(jifen) from jifensc WHERE kkhcode='0001')
IF @JF>=10
BEGIN
select @sy=(@jf-10.00)
delete jifensc where kkhcode='0001'
insert into jifensc(kkhcode,riqi,jifen) values ('0001','2006-06-02',@sy)
END
/*3.修改并增加记录*/
我想在这个存储过程中加事务管理,如果有任何(1.2.3)有一个遇到问题时的话,数据都将回滚!都不执行!!!!

这个事务该怎么加??
 
在一个批sql 语句中,本就是默认为一个事务,
只要1,2.3中有一条语句有异常都会回滚
 
to xj_lq,
什么意思?能不能在说详细一点???
我的意思是要不要加commit和rollback?
如果要加的话?应该怎么加?
 
你用的上什么数据库? 如果是 sqlserver 可以根据
if @@error=0 begin
rollback tran
return 1
end
 
请大家帮我看下我写的事务管理对不对???
create procedure proc_jifensc
(@kkhcode char(10)
@jifen decimal(10,2)
@shanchu int output
) AS
BEGIN
DECLARE @string char(10)
select @string=(select count(*) from jifensc where riqi<convert(char(10),dateadd(month,-6,getdate()),120)and kkhcode=@kkhcode)
if @string>0
begin
begin tran
delete jifensc where riqi<convert(char(10),dateadd(month,-6,getdate()),120)and kkhcode=@kkhcode /*删除超过六个月的记录*/
if @@error<>0
begin
rollback tran
set @shanchu=0
return
end
else
commit tran
set @shanchu=1
return
end

begin tran
insert into jifensc (kkhcode,riqi,jifen) values (@kkhcode,convert(char(10),getdate(),120),@jifen) /*增加记录*/
if @@error<>0
begin
rollback tran
set @shanchu=00
return
end
else
commit tran
set @shanchu=11
return
END
 
不用那么多,一个就够了。
-----
create procedure proc_jifensc
(@kkhcode char(10)
@jifen decimal(10,2)
@shanchu int output
) AS
BEGIN
begin tran
DECLARE @string char(10)
select @string=(select count(*) from jifensc where riqi<convert(char(10),dateadd(month,-6,getdate()),120)and kkhcode=@kkhcode)
if @string>0
begin
delete jifensc where riqi<convert(char(10),dateadd(month,-6,getdate()),120)and kkhcode=@kkhcode /*删除超过六个月的记录*/


insert into jifensc (kkhcode,riqi,jifen) values (@kkhcode,convert(char(10),getdate(),120),@jifen) /*增加记录*/
if @@error<>0
begin
rollback tran
set @shanchu=00
return
end
else
commit tran
set @shanchu=11
return
END
 
这样是不是如果 /*删除超过六个月的记录*/ 执行错误的话 后面的/*增加记录*/也就不执行了,数据会回滚的???
 
在事务内都会回滚。你可以测试一下,故意出错看会不会。
 
多人接受答案了。
 
后退
顶部