举例多记录操作语句:(楼主看看update是怎么写的)CREATE TRIGGER 名1 ON dbo.tabMain
FOR INSERT
AS
insert db2..tabSlave select * from inserted
goCREATE TRIGGER 名2 ON dbo.tabMain
FOR update
AS
update db2..tabSlave set 列=aa.列 from inserted aa where aa.编号=db2..tabSlave.编号
goCREATE TRIGGER 名3 ON dbo.tabMain
FOR delete
AS
delete db2..tabSlave where 编号 in (select 编号 from deleted)

解决方案 »

  1.   

    SQL中的触发器是这样的,不支持行级触发.即: 一个更新语句如果影响到多个行时,只产生一次触发.所以你在触发器的代码中就要考虑,更新产生的触发可能是多条记录,对就的处理语句也应该做这方面的处理.
      

  2.   

    我编的是进销存系统.有一项功能为入库单审核,有入库单表和入库单商品明细表.当用户审核后,入库单表中的RITAG和明细表中的RITAG都是表示,当RITAG=1是表示此入库单或商品入库.
    我设了两个触发器,一个是入库单表的,一个是明细表的.其中RIENO为入库单号.为RCIN表的主键,RCINB表的外键.
    这是RCIN表中的触发器.
    CREATE TRIGGER RCIN_INSERT ON dbo.RCIN
    FOR INSERTED,UPDATE
    AS
    DECLARE @RITAG BIT
    SELECT @RITAG=RITAG FROM INSERTED
    IF @RITAG=1 
    UPDATE RCINB
    SET RITAG=1
    WHERE RIENO=(SELECT RIENO FROM INSERTED)
    这是RCINB(入库单细表)表中的触发器.
    CREATE TRIGGER RCINB_INSERT ON dbo.RCINB
    FOR INSERTED,UPDATE
    AS
    DECLARE @RITAG BIT
    SELECT @RITAG=RITAG FROM INSERTED
    IF @RITAG=1 .....(执行入库操作,如使商品库存量增加等)由于刚入库时RITAG=0,所以审核时更新为1时,每个入库单所对应的商品中只有最后一个能入库,即只执行了一次触发器,真时急死我了.大家快救我.
      

  3.   

    CREATE TRIGGER RCIN_INSERT ON dbo.RCIN
    FOR INSERT,UPDATE
    AS
    UPDATE RCINB
    SET RITAG=1
    WHERE RIENO in (SELECT RIENO FROM INSERTED where RITAG=1)
      

  4.   

    还是没能实现.此改后,RCINB表中对应的RITAG是全变成了1,可是只有最后一个入库商品执行了触发器,入了库,不知为何.
      

  5.   

    这个问题我在近期发现,已经成功解决,原因是在你这样更新多条记录的时候,inserted表中存在多条记录,这样我是采用游标进行遍历,然后进行逐行处理。我的问题是存在于delete触发器,如果采用delete from table1时候,希望用触发器删除所有相关信息,同样的问题是只删除一条,现在用游标解决了,示例代码如下,希望对你有启发:--drop trigger trg_delete_crjlb
    create trigger trg_delete_crjlb on crjlb with encryption for delete as
    declare @cpbs char(3),@crbh char(2)
    declare del_cursor cursor for select cpbs,crbh from deleted --看看能否管用
    open del_cursor
    fetch del_cursor into @cpbs,@crbh
    while @@fetch_status=0
    begin
      exec('drop table B'+@cpbs+@crbh)
      fetch del_cursor into @cpbs,@crbh
    end
    close del_cursor
    deallocate del_cursor
    go---------------------------------
    你可以将我的代码修改,这仅仅是个思路,祝你顺利
      

  6.   

    我用游标写成了这样,可还是不行,在RCIN表中更改后RCINB表的数据居然没反应,不知为何.
    用游标怎样进行定位更新呢?就是说,我遍历到哪一行,就对那一行的RITAG字段进行更新,该怎么写呢???CREATE TRIGGER [NEWRCIN_INSERTED] ON [dbo].[RCIN] 
    FOR INSERT 
    AS
    DECLARE @RITAG BIT,@RIENO NUMERIC
    SELECT @RITAG=RITAG FROM  INSERTED
    IF @RITAG=1 
    BEGIN
    DECLARE UPDATE_CURSOR CURSOR FOR SELECT RIENO FROM RCINB WHERE RIENO=(SELECT RIENO FROM INSERTED)
    OPEN UPDATE_CURSOR
    FETCH NEXT FROM UPDATE_CURSOR 
    WHILE @@fetch_status=0
    BEGIN 
      UPDATE RCINB 
      SET RITAG=1 WHERE CURRENT OF UPDATE_CURSOR
      FETCH NEXT FROM UPDATE_CURSOR 
    END
      
    CLOSE UPDATE_CURSOR
    DEALLOCATE UPDATE_CURSOREND