CREATE TRIGGER 名 on 视图Table
INSTEAD OF update
AS
BEGIN
  declare  cursor_insert cursor for select c# from inserted where paidflag=1
  declare @i int
  open cursor_insert
  fetch cursor_insert into @i
  while @@fetch_status=0
  begin
    exec PWriteOff @i
    fetch cursor_insert into @i
  end
  close cursor_insert
  deallocate cursor_insert
END
go

解决方案 »

  1.   

    CREATE TRIGGER 名 on 视图Table
    INSTEAD OF update
    AS
    BEGIN
      declare  cursor_insert cursor for select RefID from inserted where paidflag=1
      declare @i int
      open cursor_insert
      fetch cursor_insert into @i
      while @@fetch_status=0
      begin
        exec PWriteOff @i
        fetch cursor_insert into @i
      end
      close cursor_insert
      deallocate cursor_insert
    END
    go
      

  2.   

    批更新时,inserted表也是一批记录。
      

  3.   

    谢谢高手们,很开心得到你们的帮助,我一开始本来是不想用游标,事实上的确需要用到。还有,使用了Instead触发,那是不是更新这个视图Table的PaidFlag字段时,更新就不成功,而触发了Instead触发器?如果真是这样的话,我如何更新这个视图Table的PaidFlag字段?还有,如果批更新一共有10000条记录,使用游标对速度影响大吗?
      

  4.   

    存储过程大概是这样子的INSERT INTO Table2.A
    SELECT Table1.A 
    FROM Table1
    WHERE Table1.RefID=@RefIDDELETE Table1 WHERE Table1.RefID=@RefID
      

  5.   

    其中对于当前库来说,Table1和Table2都是视图来的。我后来在物理表Table1的数据库上创建基于表的触发器就可以解决了那个更新的问题,因为我在分布式视图上更新一个视图,在物理表上也是会解发更新动作的,这时更新动作就会触发。