本帖最后由 srszzw 于 2013-12-23 18:11:18 编辑

解决方案 »

  1.   

    貌似WITH(XLOCK)可以做的,不知道正不正确
      

  2.   

    可以的:使用rowlock1 如何锁一个表的某一行A 连接中执行SET TRANSACTION ISOLATION LEVEL REPEATABLE READbegin tran select * from tablename with (rowlock) where id=3 waitfor delay '00:00:05' commit tran B连接中如果执行update tablename set colname='10' where id=3 --则要等待5秒update tablename set colname='10' where id<>3 --可立即执行
      

  3.   


    这个可以,只不过,需要建立相应的索引,才能支持,比如如下的语句,就可以:select *
    from tb WITH(XLOCK)
    where id = 5如果在id列上有索引,应该是可以达到你的需求的,就是在id为5的这一行,有一个x排他锁
      

  4.   

    另外,你可以通过如下的试图来查看,到底是否是加了排他锁的:select *
    from sys.dm_tran_locks
      

  5.   

    其实只要有索引的话,不用RowLock应该也可以达到同样的效果。因为SQL Server引擎可以针对单行加锁。
      

  6.   

    没必要可以限制行锁,并发、大范围操作时问题多多。设计和编码良好的话你都不需要过多考虑这些。sqlserver加锁不是为了阻碍性能的发挥,而是为了获得数据的一致性