- 作者:zhaozj
- 发表时间:2020-12-23 10:38
- 来源:未知
原帖地址:
http://community.csdn.net/Expert/topic/3269/3269542.xml?temp=8.726138E-02
table1序号 类别 起始号 终止号 总数 已用票号 已用票数 结余票号 结余票数 组合编号(主键)1 A 0000001 0000005 5 0000001,0000003 2 0000002,0000004,0000005 3 A-0000001-0000005 2 B 0000006 00000010 5 0000006,0000008 2 0000007,0000009,0000010 3 B-0000006-0000010table2组合编号 类别 票号 A-0000001-0000005 A 0000001A-0000001-0000005 A 0000003B-0000006-0000010 B 0000006B-0000006-0000010 B 0000008
希能在table2写触发器更新table1已用票号,已用票数,结余票号,结余票数的字段。
--------------------------------------------------------------------------------------------------------------------
--示例
--示例数据create table table1(序号 int,类别 varchar(10),起始号 char(7),终止号 char(7),总数 int,已用票号 varchar(8000),已用票数 int,结余票号 varchar(8000),结余票数 int,组合编号 varchar(20))insert table1 select 1,'A','0000001','0000005',5,'',0,'0000001,0000002,0000003,0000004,0000005',5,'A-0000001-0000005'union all select 2,'B','0000006','0000010',5,'',0,'0000006,0000007,0000006,0000009,0000010',5,'B-0000006-0000010'
create table table2(组合编号 varchar(20),类别 varchar(10),票号 char(7))go
--处理的触发器create trigger tr_process on table2for insert,update,deleteasdeclare @组合编号 varchar(20) ,@sta varchar(8000),@nma int ,@stb varchar(8000),@nmb int
--处理被删除的select d.组合编号,d.票号 ,已用票号=','+a.已用票号+',',a.已用票数 ,结余票号=a.结余票号,a.结余票数into #d from deleted d,table1 awhere d.组合编号=a.组合编号order by d.组合编号,d.票号
if @@rowcount>0begin update #d set @sta=replace( case 组合编号 when @组合编号 then @sta else 已用票号 end, ','+票号+',',','), @nma=case 组合编号 when @组合编号 then @nma-1 else 已用票数-1 end, @stb=case 组合编号 when @组合编号 then @stb+',' else case 结余票号 when '' then '' else 结余票号+',' end end+票号, @nmb=case 组合编号 when @组合编号 then @nmb+1 else 结余票数+1 end, @组合编号=组合编号, 已用票号=@sta,已用票数=@nma, 结余票号=@stb,结余票数=@nmb
update a set 已用票号=case b.已用票数 when 0 then '' else substring(b.已用票号,2,len(b.已用票号)-2) end ,已用票数=b.已用票数 ,结余票号=b.结余票号 ,结余票数=b.结余票数 from table1 a,#d b,( select 组合编号,已用票数=min(已用票数) from #d group by 组合编号 )c where a.组合编号=b.组合编号 and c.组合编号=b.组合编号 and c.已用票数=b.已用票数end