--注意S是共享锁,X是排它锁在连接1中执行begin tran
select * from ticket with(TABLOCKX) where id='BH000001'
waitfor delay '00:00:10'
commit然后再在连接2中执行 
begin tran
select * from ticket
commit

解决方案 »

  1.   

    to 萧萧:
    用TABLOCKX 会把整个表锁住,我只想在ID ='BH000001'的这一条记录上加排他锁
    也就是说 连接2 中 可以选出ID != 'BH000001' 的任何记录 
      

  2.   

    to 萧萧:
    而且,我用 WITH (ROWLOCK XLOCK),不是加 行级X锁吗
      

  3.   

    改为:
    在连接1中执行
    begin tran
    select * from authors WITH (ROWLOCK XLOCK readpast) where au_id='172-32-1176'
    waitfor delay '00:00:10'
    commit
    在连接2中执行 
    begin tran
    select * from authors WITH (ROWLOCK XLOCK readpast)
    commit
      

  4.   

    TO wudan8057:
    你的执行结果看起来确实是我想要的,但是在连接2 中好象又对au_id ='172-32-1176' 以外的所有记录加了xLOCK, 我想要在连接2中 只选出除加了X锁的 au_id ='172-32-1176' 以外的记录,但不对这些记录加X,请教
      

  5.   

    你可以将连接2的xlock去掉,结果是样的.
      

  6.   

    去掉xlock 结果不一样,会把所有数据都选出来
      

  7.   

    将第二个连接改为:
    begin tran
    select * from authors WITH (updlock readpast)
    commit