锁升级是系统自动进行的,没有办法改变。为什么不倒过来想呢,你允许一次查询一万行,又想使用行锁,为什么不限制一次查询的行数呢,这个非常简单,TOP就可以。另外,锁是需要消耗资源(内存)的。

解决方案 »

  1.   

    你可以用ROWLOCK呀.
    select * from tablename with (ROWLOCK) where field1='abc'LOCK HINT就是用来改变系统的自动设置的. 关于其他的,我同意 Yang_(扬帆破浪) 的说法
      

  2.   

    在 SQL Server 中,默认启用行级锁定。SQL Server 的锁定策略为行锁定,并可能提升为页或表锁定。应用程序要求的隔离级别确定了 SQL Server 使用的锁定行为。如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的,可以确保数据的正确性,但可能对并发产生负面影响。可以通过使用 SET TRANSACTION ISOLATION LEVEL 语句设置会话的隔离级别,来自定义整个会话的锁定。指定隔离级别后,SQL Server 会话中所有 SELECT 语句的锁定行为都运行于该隔离级别上,并一直保持有效直到会话终止或者将隔离级别设置为另一个级别。例如,若要设置事务隔离级别为可串行读,以确保并发事务不能在 authors 表中插入幻像行,请执行:USE pubs
    GO
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    GO
    BEGIN TRANSACTION
    SELECT au_lname FROM authors
      

  3.   

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    GO
    BEGIN TRANSACTION ---lock
    SELECT 箱号 FROM table1END TRANS