本贴并非问题。只是为了回答“新手提问有关SQL触发器的问题  [已结贴,结贴人:vickiyan]”这个哥哥我在回贴,还没有打完字,他老人家就结贴了,有些问题没有和他说清楚呢
CREATE TRIGGER TR_SendB ON dbo.SendB
FOR UPDATE
NOT FOR REPLICATION   --这条记得加上啊, 
AS 
   DECLARE @ID INT
   DECLARE @MOBB VARCHAR(50)
   DECLARE @State
   SET @ID =(SELECT ID FROM INSERTED)
   SET @MOBB=(SELECT MOBB FROM INSERTED)
   SET @State=(SELECT State FROM INSERTED)
   PRINT @ID
   PRINT @MOBB
   PRINT @StateIF UPDATE (State)
BEGIN
   UPDATE AcceptB SET Reply=@State WHERE Accept.ID=@ID AND Accept.MOBB=@MoBB AND Reply<>@State
END
这样写的好处是在UPDATE AcceptA时不用关联到INSERTED临时表,不会出现超时等无数据反回的情况。另外,请不要使用
SQL codeUPDATE SendB SET Reply=1  OR
UPDATE SendB SET Reply=0如果要用的话,请将我上面的触发器语句用游标来处理。不知道楼主是否要用到批处理SendB呢?上面的回答没有一个涉及了这个问题的。一次更新一条是没有问题的,但一次更新很多条就会出问题哦。

解决方案 »

  1.   

    谢谢楼主又学到东西了.不要关联临时表.
    请教一下NOT FOR REPLICATION   --这条记得加上啊, 
    这句是什么意思呢
      

  2.   


    NOT FOR REPLICATION表示当复制进程更改触发器所涉及的表时,不应执行该触发器。
      

  3.   

    SET @ID =(SELECT ID FROM INSERTED)
       SET @MOBB=(SELECT MOBB FROM INSERTED)
       SET @State=(SELECT State FROM INSERTED)可否改为
    select @Id=id,@mobb=mobb,@state=state from inserted