ALTER Trigger [同步修改触发器] ON [dbo].[A]
For update
as
IF @@ROWCOUNT>1 RETURN
begin
Update 临时B.dbo.A Set A=(Select A From Inserted),B=(Select B From Inserted),C=(Select C From Inserted) Where ID=(Select ID From Inserted)
End因为Updated包含Deleted和Inserted,那么有三个疑问:
1.如果若干用户同时修改不同记录,那么 for update 的 trigger 去找 inserted 的数据,会不会乱
2.如果若干用户同时修改相同记录,那么又会不会乱
3.如果若干用户在insert的同时若干用户在update,不管数据相同还是不同,那么会不会乱上面指的乱是指for update 的 trigger 里面 Select * From Inserted 数据会不会读错,不相对应。

解决方案 »

  1.   

    个人观点:不会混乱的
    sql的执行, 始终是队列形式的, 即在实际执行时, 永远不可能两个update同时进行, 始终会有一个update语句先执行, 执行时加锁, 然后另一个稍后到达(安排)的update在第1个update执行完成前(锁释放前), 只能等待.
      

  2.   

    是的,像update这样的操作肯定要加排他锁的.即使两个客户端真是在数据库,操作系统所能分辨的时间精度下同时操作,也会被自动排序.然后依次执行.也就是说 inserted只可能一次被一个update操作影响.不必担心.