我在两台机器做了这样一个实验A机先开始做  select * from table1在A机没有结束查询的同时 B机在做
insert into table1
select * from table2
where heno='3657'     //有两个满足记录,就是能插入两行在我做这个实验前,做了一次 select count(*) from table1
返回的记录是653310我觉得根据事物的一些性质在执行完insert into table1
select * from table2
where heno='3657'   table1中应该还是653310
在执行查询时才是653312这是什么问题呢

解决方案 »

  1.   

    select * from table1 with(tablock)  --表锁这样,insert 的动作就会等待 select结束(表锁释放),再执行。     
      

  2.   

    可以使用 SELECT、INSERT、UPDATE 和 DELETE 语句指定表级锁定提示的范围,以引导 Microsoft® SQL Server™ 2000 使用所需的锁类型。当需要对对象所获得锁类型进行更精细控制时,可以使用表级锁定提示。这些锁定提示取代了会话的当前事务隔离级别。
    SQL Server 查询优化器自动作出正确的决定。建议仅在必要时才使用表级锁定提示更改默认的锁定行为。禁止锁定级别反过来会影响并发。