begin tran
    select * from tb with(xlock,paglock) where ....
    其它操作...
commit tran

解决方案 »

  1.   


    锁后其他事务就不能对where后面的进行update delete insert了吗?可以select吗?
      

  2.   


    要加上HoldLock,否则在默认的Read Committed层级下,select语句一执行完,锁就釋放了.
    begin tran
    select * from tb with(xlock,holdlock) where ....
    其它操作...
    commit tran
      

  3.   


    这个是地该整个表锁定还是where条件符合的锁顶哦?
      

  4.   


    HoldLock是对整个表的吗``有针对表中某行的,并且在这个事务执行完后才释放锁的吗?
      

  5.   

    不是针对整个表,
    HoldLock是指保持该锁到交易结束.WITH (XLOCK,PAGLOCK)  --锁定符合Where条件记录所在的页,并保持到交易结束WITH (XLOCK,HOLDLOCK)  --锁定符合Where条件的记录,并保持到交易结束.EX:--(1)
    begin tran
      select * from orders with(xlock,paglock) where orderid=10252--执行完过後,用sp_lock查看会发现整个orderid=10252所在页都会加上X锁
    --(2)
    begin tran
      select * from orders with(xlock,holdlock) where orderid=10252
    --执行完过後,用sp_lock查看会发现只锁住了orderid=10252一行, 该行所占的页会有个意向X锁.
    lz慢慢体会吧
      

  6.   


    这里的 "整个orderid=10252所在页" 指什么`````
      

  7.   

       up    up