BEGIN TRAN
select * FROM TBTEST where ID='1234'WAITFOR DELAY '00:00:20'
commit TRAN
自己理解的,应该在TBTEST 加上一个S锁,但是执行select * from sys.dm_tran_locks 没发现该锁,为什么呢?难道是sqlserver查询的时候不显示写加锁,就不加锁?
那下面的情况MS也是这样的。BEGIN TRAN
UPDATE Tab SET Col1 =5 where Col1 =5
WAITFOR DELAY '00:00:20'
select * FROM TBTEST where ID='1234'
commit TRAN
请高人解释下!

解决方案 »

  1.   

    BEGIN TRAN
    select * FROM TBTEST(xlock,paglock) where ID='1234'WAITFOR DELAY '00:00:20'
    commit TRAN试试,
      

  2.   

    BEGIN TRAN
    select * FROM TBTEST(xlock,paglock) where ID='1234'WAITFOR DELAY '00:00:20'
    commit TRAN
      

  3.   

    在默认的“读已提交事务隔离级别”下,S 锁在 select 语句查询结束即被释放,不会保持到事务结束。可使用 holdlock 锁提示(select * FROM TBTEST with (holdlock) where ID='1234'),让 S 锁保持到事务结束,或者将事务隔离级别设置为“可重复读”。另外,按你提供的 SELECT 语句,S 锁设置在 ID='1234'指定的行或索引键上,TBTEST 表上会设置 IS 锁。
      

  4.   

    BEGIN TRAN
    select * FROM TBTEST with(xlock,paglock) where ID='1234'WAITFOR DELAY '00:00:20'
    commit TRAN
    再用sp_lock查看即可(要新建一个窗口)
      

  5.   


    begin tran;    select * from color with xlock    insert into color('08','blue')commit