CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb 
FOR INSERT
AS 
declare @fbxh decimal(18),
            @fbyjje money,@fbjmje money
select @fbxh=收费编号,@fbyjje=已交金额,@fbjmje=减免金额 from inserted
update main_sfzb set 已交金额=已交金额+@fbyjje,减免金额=减免金额+@fbjmje where 收费编号=@fbxh这个是我写的一个触发器,在对表main_sffb插入数据的时候同时更新main_sfzb的相关数据
问题是这样的:我用SQL语句:insert main_sffb( 字段) 插入多条数据,数据已经插入了,可是在 main_sfzb中只对第一条满足的记录做了更新,其他的都没变,清高手帮看看有什么问题?

解决方案 »

  1.   

    CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb 
    FOR INSERT
    AS 
    select * into #t from insertedDECLARE test_Cursor CURSOR FOR
    select * from #tOPEN test_Cursor FETCH NEXT FROM test_Cursor 
    WHILE @@FETCH_STATUS = 0
    BEGIN
      --更新写这里
    FETCH NEXT FROM Employee_Cursor
    ENDCLOSE test_Cursor 
    DEALLOCATE test_Cursor 
    DROP TABLE #T
    不知道对不对,高手给指导下
      

  2.   

    --try
    CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb 
    FOR INSERT
    AS 
    update main_sfzb
    set main_sfzb.已交金额=main_sfzb.已交金额+inserted.已交金额,main_sfzb.减免金额=main_sfzb.减免金额+inserted.减免金额 
    FROM main_sfzb A,(select 收费编号,sum(已交金额) 已交金额,sum(减免金额) 减免金额 from inserted group by 收费编号) B
    where A.收费编号=B.收费编号
      

  3.   

    --上面错了
    --try
    CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb 
    FOR INSERT
    AS 
    update main_sfzb
    set main_sfzb.已交金额=main_sfzb.已交金额+B.已交金额,main_sfzb.减免金额=main_sfzb.减免金额+B.减免金额 
    FROM main_sfzb,(select 收费编号,sum(已交金额) 已交金额,sum(减免金额) 减免金额 from inserted group by 收费编号) B
    where main_sfzb.收费编号=B.收费编号
      

  4.   

    CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb 
    FOR INSERT
    AS 
    update main_sfzb 
    set 已交金额=a.已交金额+b.已交金额,
        减免金额=a.减免金额+b.减免金额 
    from main_sfzb a,inserted b
    where a.收费编号=b.收费编号go
      

  5.   

    估计Sql的Insert Trigger的机制是这样,
    当插入很多条数据的时候,把所有插入的数据
    写如Inserted ,触发器只执行一次,而不是插入几条数据
    就执行几次触发器的内容,估计是这样;)期待高手
      

  6.   

    上述要求完全不用游标,直接用表关联更新即可。CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb 
    FOR INSERT
    AS 
    update main_sfzb set 
          已交金额=isnull(已交金额,0) + isnull(B.已交金额,0),
          减免金额=isnull(减免金额,0) + isnull(B.减免金额,0)
    FROM main_sfzb A inner join 
         (select 收费编号,sum(已交金额) 已交金额,sum(减免金额) 减免金额 from inserted group by 收费编号) B
         on  A.收费编号=B.收费编号