B :数据表
在A表内定义的触发器去更新B数据
触发器是Updated     
   Update B set 
        B.TotalFee=B.TotalFee-i.FeeTotal,
        B.UseAmount=B.UseAmount-i.UseAmount
         From Inserted i
     Where B.MeterId=i.MeterId  and i.InvState='1'当
  update A
   set InvState='1'
当 A 中的meterid值相等的 记录有多条时 触发器只会执行一次 既只执行第一条 B.MeterId=i.MeterId  后面的不执行
这是为什么?
如果想要所有满足条件的都执行该怎么写?

解决方案 »

  1.   

    举例
     A表
      第一条记录 meterid=1
      第二条记录 meterid=1
      第三条记录 meterid=2
    A 执行 update
      触发器执行
      第1,3 会被触发器操作
      第2 则不会被操作
      

  2.   

    我试了
      表table1
       fd1  fd2
        1    qwe
      表 table2
       fd1   fd2
        2     qwe
        3     qwe
        4     qwe
    1,执行
      update table1
       set table1.fd1=table1.fd1+table2.fd1
      from table2
      where table1.fd2=table2.fd2
     结果:table1.fd1=5
     sql 只匹配了最后一条满足条件的记录2,执行
      update table1
       set table1.fd1=table1.fd1+b.fd1
      from (select fd2,sum(fd1) as fd1 from table2 group by fd2) as b
      where table1.fd2=b.fd2
    结果table1.fd1=10
    我想得到第2种结果
    第1种写法错在哪 
      

  3.   

    还是没说明白,触发器在A表,更新的是B表,你应该列出B表的数据情况才对呀。
      

  4.   

    update yu ju xie cuo le
      

  5.   

    问题明白了
    谢谢大家的参与
    如果 UPDATE 语句包含了未指定每个所更新列的位置只有一个可用值的 FROM 子句(换句话说,如果 UPDATE 语句是不确定性的),则其结果将不明确。例如,对于下面脚本中的 UPDATE 语句,表 s 中的两行都满足 UPDATE 语句中的 FROM 子句的限定条件,但是将用 s 的哪一行来更新表 t 内的行是不明确的。CREATE TABLE s (ColA INT, ColB DECIMAL(10,3))
    GO
    CREATE TABLE t (ColA INT PRIMARY KEY, ColB DECIMAL(10,3))
    GO
    INSERT INTO s VALUES(1, 10.0)
    INSERT INTO s VALUES(1, 20.0)
    INSERT INTO t VALUES(1, 0.0)
    GO
    UPDATE t 
    SET t.ColB = t.ColB + s.ColB
    FROM t INNER JOIN s ON (t.ColA = s.ColA)
    GO当组合 FROM 和 WHERE CURRENT OF 子句时,可能发生同样的问题。在本例中,表 t2 中的两行都满足 UPDATE 语句中的 FROM 子句的限定条件。将用表 t2 的哪一行来更新表 t1 中的行是不明确的。