我給一張表寫了個insert觸發器,當新增數據時觸發,由於觸發器裡面需要運行一段時間,又新增數據,上一個觸發器還沒運行完,這時,觸發器會執行嗎,還是等上一個觸發器完成再執行。

解决方案 »

  1.   

    不同会话之间的触发器是独立的也就是A在执行时, 它激活了触发器, 没有完成时, 如果B执行, 它照样会激活触发器当然, 如果B使用的资源如果被A锁住, B就一定要等A释放锁, 这时B的触发器当然也不会激活了
      

  2.   

    楼主的意思是“触发器A正在执行触发过程,这个时候又往表里插入了数据,这个时候A会不会再触发”吗?
    我的回答是“再往表里插入数据时,肯定会等到上一个触发过程完毕,然后再触发A”
    楼主可以试试
      

  3.   

    alter trigger tr_test on _test 
    instead of insert                                         
    as 
    select * into # from inserted 
    declare @pkid int
    select @pkid=dbo.nextval('Child','ChildId')-1
    update # set id = @pkid,@pkid = case when (id is null)then @pkid+1 when (id is not null ) then id end
    insert  into  _test select * from #
    update Sequence_Alloc set Seq_Value=@pkid where Section='Child' and Seq_Code='ChildId'A沒執行完不可以執行B,應該怎樣上鎖。可以給出代碼嗎
      

  4.   

    顶钻,大批量插入的锁很复杂,等锁释放就会执行第二个插入,大多是page锁
      

  5.   


    不用你加,insert自己就加锁了