none
触发器更新时,只有一条记录被更新,用错了机制? RRS feed

  • 问题

  • 这个表是有一个父子关系节点的表,我希望在父节点变化时,子节点对应的父节点值一起变化,我写了一个触发器,但是批量操作时,只能更新一条记录,单条执行时没有问题,批量就不行


    ALTER  TRIGGER [dbo].[up_tbs] ON [dbo].[tbs]
    FOR UPDATE
    AS
    BEGIN
     DECLARE @oldid INT,@newid INT
     
     
     SELECT @oldid=ids FROM DELETED
     SELECT @newid=ids  FROM INSERTED
     
      INSERT INTO tce(n,o,times) SELECT @newid,@oldid,GETDATE()--跟踪语句
     
     IF @oldid<>@newid
     begin
     
      
      UPDATE tbs SET parentid=@newid WHERE parentid=@oldid--把父节点更新为最新
      END
     
     
    END

    2013年4月1日 6:23

答案

全部回复

  • SQL Server 没有行级触发器, 你可以在触发器中用游标来处理 inserted 中涉及的每条记录
    • 已标记为答案 fangyanqin 2013年4月1日 7:05
    2013年4月1日 6:41
  • 谢谢,明白了。

    这样不是有个问题,会不会引起触发器循环。特别是针对这表自己的处理。

    2013年4月1日 7:05
  • 触发器是可以递归的(就是你说的循环)。详情请查询联机丛书中的“使用嵌套触发器”。

    想不想时已是想,不如不想都不想。

    2013年4月1日 8:08
    版主