表A
序号  姓名 级别 比例  消费
1     a     1   0.05  100
2     b     2   0.03  500
3     c     3   null  600表B
序号  姓名   积分
1     a     100*0.05=5    
2     b     500*0.03=3    
3     c      0   怎样更新 表B. 积分 (按级别提积分更新)

解决方案 »

  1.   

    CREATE TRIGGER my_trig
    ON 表A
    FOR update
    AS
    IF UPDATE(消费)
    update 表B set 积分=insertd.比例*insertd.消费 from 表B,insertd where 表B.姓名=insertd.姓名
    go
      

  2.   

    CREATE TRIGGER my_trig
    ON 表A
    FOR update
    AS
    IF UPDATE(消费) or UPDATE(比例) 
    update 表B set 积分=i.比例*i.消费 
    from 表B,insertd i 
    where 表B.姓名=i.姓名   --表B.序号=i.序号go
      

  3.   

    表A
    序号  姓名 级别 比例  消费
    1     a     1   0.05  100
    2     b     2   0.03  500
    3     c     3   null  600
    4     a     1   0.05  200
    对不起表A有重复记录,请全点写下好吗!
      

  4.   

    表B
    序号  姓名   积分
    1     a     300*0.05=5    
    2     b     500*0.03=3    
    3     c      0
      

  5.   

    表B
    序号  姓名   积分
    1     a     300*0.05=15    
    2     b     500*0.03=3    
    3     c      0
      

  6.   

    感觉楼主说的表a应该是只有插入,没有更新吧,那应该是建insert类型。
    CREATE TRIGGER my_trig
    ON 表A
    FOR insert
    AS
    update 表B 
    set 积分=t.l
    from 表B inner join 
       (select 序号,sum( (case 比例 when NULL then 0 esle 比例 end) * 销费) as l 
        from inserted 
        group by 序号) as t 
     on 表B.序号=t.序号 gogo
      

  7.   

    CREATE TRIGGER my_trig
    ON 表A
    FOR update
    AS
    IF UPDATE(消费) or UPDATE(比例) 
    update 表B set 积分=i.比例*i.消费 
    from 表B,insertd i 
    where 表B.序号=i.序号    --表B.姓名=i.姓名go
      

  8.   

    CREATE TRIGGER my_trig
    ON A
    FOR insert
    AS
    update B 
    set 积分=t.l
    from B inner join 
       (select 姓名,sum( (case 比例 when NULL then 0 else 比例 end) * 消费) as l 
        from inserted 
        group by 姓名) as t 
     on B.姓名=t.姓名 
    go
      

  9.   

    这样试试:
    UPDATE b set 积分 = a.积分 
    FROM tableB b 
    INNER JOIN (select 姓名,isnull(sum(比例*消费),0) as 积分 from tableA group by 姓名) a
    ON b.姓名 = a.姓名
      

  10.   

    Updte B
    Set 积分 = A.消费 * Isnull(A.比例,0)
    From B , A
    Where A.Id = B.Id
    And   B.姓名 = 姓名
      

  11.   

    CREATE TRIGGER my_trig
    ON 表A
    FOR update
    AS
    IF UPDATE(消费) or UPDATE(比例) 
    update 表B set 积分=i.比例*i.消费 
    from 表B,insertd i 
    where 表B.姓名=i.姓名   --表B.序号=i.序号go
      

  12.   

    表A有重复记录,根据姓名来更新 ,条件是: 积分=sum( 消费)*比例
      

  13.   

    表A有重复记录,根据姓名来更新 ,条件是: 积分=sum( 消费)*比例??你要的触发器是a更新时,b自动更新吧?但是你有重复记录,比如你给的例子有两个A,你会更新哪个A呢? 根据什么来更新呢?
      

  14.   

    ----插入时
    create trigger trg_insert on tableA
    for insert
    as
    UPDATE b set 积分 = 积分 + a.积分 
    FROM tableB b 
    INNER JOIN 
    (
    select 姓名,isnull(sum(比例*消费),0) as 积分 
    from tableA x inner join inserted i on x.姓名 = i.姓名 group by 姓名
    ) a ON b.姓名 = a.姓名
    GO----更新时
    create trigger trg_insert on tableA
    for update
    as
    UPDATE b set 积分 = 积分 + a.积分 
    FROM tableB b 
    INNER JOIN 
    (
    select i.姓名,isnull(sum(i.比例*i.消费),0) - isnull(sum(d.比例*d.消费),0) as 积分 
    from deleted d inner join inserted i on d.姓名 = i.姓名 group by i.姓名
    ) a ON b.姓名 = a.姓名
    GO
      

  15.   

    抱歉,更正一下上面的INSERT触发器:
    ----插入时
    create trigger trg_insert on tableA
    for insert
    as
    UPDATE b set 积分 = 积分 + a.积分 
    FROM tableB b 
    INNER JOIN 
    (
    select 姓名,isnull(sum(比例*消费),0) as 积分 
    from inserted group by 姓名
    ) a ON b.姓名 = a.姓名
    GO