表—:T_jgk,编号:BH;名称:MC;定额价:DEJ
表二:T_cltcl, 编号:C_bh,名称:C_name
表三:T_Dglj,编号:D_bh,名称:D_name,(表中的名称分为三种情况:分别以BB,BE,BF开头的),定额价:D_dj第一个触发器:编号相同的情况下,修改名称
要求1、:条件为:修改表一T_jgk中的名称,同时更新表二和表三中的名称,修改条件为判断BH是否相同
  特殊情况:表三T_Dglj中的编号有的以A开头,有的以B开头,有的以C开头,先的去掉第一个A|B|C才能判断编号是否相同(注意:数据库表中不能去掉);
        表三T_Dglj中的名称为特殊名称,修改时在修改后的名称前加一个字母‘B’。第二个触发器:编号相同的情况下,修改定额价
要求1、:条件为:修改表一T_jgk中的定额价,同时更新表三T_Dglj中的定额价,修改条件为判断BH是否相同(表三T_Dglj中的编号有的以A开头,有的以B开头,有的以C开头,先的去掉第一个A|B|C才能判断编号是否相同(注意:数据库表中不能去掉);)第三个触发器:修改编号
 要求1、:条件为:修改表一T_jgk中的编号,同时更新表二T_cltcl中的编号及表三T_Dglj中的的编号(表三中的编号前面有一个字母“B”,判断时候先的去掉一个字母B,更新以后在更新后的编号前加一个字母‘B’,才是正确的编号显示格式)请大家帮忙想想,因为最多一百分,小弟会再给加分的!

解决方案 »

  1.   


    create trigger tru_T_jgk
    on T_jgk
    for update
    as 
    begin
    if update(MC)
    begin
    update T_cltcl set C_name = MC from inserted where BH=C_bh
    update T_Dglj set D_name='B'+MC from inserted where BH=stuff(D_bh,1,1,'')
    end
    if update(DEJ)
    update T_Dglj set D_dj=DEJ from inserted where BH=stuff(D_bh,1,1,'')
    if update(BH)
    begin
    update T_cltcl set C_bh = BH from inserted where BH=C_bh
    update T_Dglj set D_bh='B'+BH from inserted where BH=stuff(D_bh,1,1,'') and left(D_bh,1)='B'
    end
    end
      

  2.   

    要实现,必须表一
    编号:BH;唯一
    名称:MC;唯一
    定额价:DEJ界面限定
    编号:BH;唯一
    名称:MC;唯一
    不能同时修改create trigger tr_T_jgk_update
    on T_jgk
    for update
    as
       if update(BH)
       begin
         update b set
           C_bh = i.bh
         from  T_cltcl b,inserted i,deleted d
         where i.mc=d.mc
         and d.bh =b.C_bh     update b set
           D_bh = 'B' + i.bh
         from  T_Dglj b,inserted i,deleted d
         where i.mc=d.mc
         and 'B' + d.bh =b.D_bh
       end
       
       if update(mc)
       begin
         update b set
           C_name = i.mc
         from  T_cltcl b,inserted i,deleted d
         where i.bh=d.bh
         and d.bh =b.C_bh     update b set
           D_name= 'B' + i.mc
         from  T_Dglj b,inserted i,deleted d
         where i.bh=d.bh
         and d.bh =stuff(b.D_bh,1,1,'')
         and left(b.D_bh,1) in ('A','B','C')
       end   if update(DEJ)
       begin
         update b set
           D_dj= i.DEJ
         from  T_Dglj b,inserted i,deleted d
         where i.bh=d.bh
         and d.bh =stuff(b.D_bh,1,1,'')
         and left(b.D_bh,1) in ('A','B','C')
       end
    GO
      

  3.   


    没动脑
    create trigger tru_T_jgk
    on T_jgk
    for update
    as 
    begin
    if update(MC)
    begin
    update T_cltcl set C_name = MC from inserted where BH=C_bh
    update T_Dglj set D_name='B'+MC from inserted where BH=stuff(D_bh,1,1,'')
    end
    if update(DEJ)
    update T_Dglj set D_dj=DEJ from inserted where BH=stuff(D_bh,1,1,'')
    if update(BH)
    begin
    update T_cltcl set C_bh = i.BH from inserted i ,deleted d where d.BH=C_bh
    update T_Dglj set D_bh='B'+i.BH from inserted  i ,deleted d where d.BH=stuff(D_bh,1,1,'') and left(d.D_bh,1)='B'
    end
    end
      

  4.   

    服务器: 消息 207,级别 16,状态 3,过程 tru_T_jgk,行 16
    列名 'D_bh' 无效。
    最后一行的'D_bh' 无效
      

  5.   

    9楼服务器: 消息 207,级别 16,状态 3,过程 tru_T_jgk,行 16
    列名 'D_bh' 无效。
    最后一行的'D_bh' 无效
    7楼的也有一些问题,如果同时修改三个就会报错,所以当初我想着弄成三个或者两个触发器。