RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
触发器实现字符串处理及统计
  • 作者: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