数据库PUBS中的authors表,想锁定CITY为aaa的记录,为什么执行下面的命令后,CITY为bbb的记录也被锁定了,无法进行UPDATE.BEGIN TRANSACTION     
select * from authors with (HOLDLOCK) where city='aaa' 如何才能锁定CITY为AAA的记录,而且CITY为BBB的记录依然能SELECT和UPDATE?新手先谢过了。

解决方案 »

  1.   

    应该不是被锁住, 应该只是检索数据的时候, 需要从aaa的记录扫描到bbb的记录, 而aaa被锁住了, 所以扫描无法往下进行, 这样看起来似乎就是bbb也被锁住了.
      

  2.   

    当然, 也有可能确实是被锁住了
    sql的锁定默认是行级的, 如果你的资源不足, 也可能导致自动升级为页级甚至表级锁, 这样会导致更多的记录被锁定
      

  3.   

    在程序里
    BEGIN TRANSACTION     
    select * from authors with (HOLDLOCK) where city='aaa' 然后在查询分析器里UPDATE的
      

  4.   

    你用下面的语句, 如果能读出数据, 则说明是我说的第1种情况.
    select * from authors with (READPAST) where city='bbb' 如果读不出数据, 则应该是我说的第2种情况.
      

  5.   

    zjcxc(邹建)
    应该不是被锁住, 应该只是检索数据的时候, 需要从aaa的记录扫描到bbb的记录, 而aaa被锁住了, 所以扫描无法往下进行, 这样看起来似乎就是bbb也被锁住了.这种情况应该怎么解决那? 谢谢
      

  6.   

    select * from authors with (READPAST) where city='bbb'  可以读出,谢谢
      

  7.   

    让select 和update 走不同的索引, 这样在update的时候, 不用扫描已经锁定的数据就可以定义到记录, 这样就可以udpate了.
    指定索引用类似下面的语句:select * from xx with(hdldlock, index=索引名)update a set xx = xx
    from xx with(index=索引名)
    当然, 要保证仅扫描索引就可以定义到记录.