我的表结构如下:
表A:
Bh:编号,Char(10)
Nd:年份,Char(4)
Jd:季度,Char(1)
Xmbh:项目编号,Char(4)
Lb:项目类别,Char(1)
其中Bh,Xmbh,Lb共同为主键,相同类别的项目相同年份,相同季度的编号相同
其中数据如下:
Bh Nd Jd Lb Xmbh
0000000001 1999 1 1 0101
0000000001 1999 1 2 0101
=================================
我有一个操作是从这个表中读出指定年份,指定季度的指定类别项目的最大编号,此时其
它用户不能修改这个表中相同类别相同项目的数据,因此我用一个事务来操作:
Begin transcation
Select IsNull(Max(Bh),0) as Bh from A with(UpdLock) where Lb='1' and Xmbh='0101' and Nd='2000' and Jd='1'
....
....
Commit transcation
现在的问题是当有两下用户同时操作该UpdLock不能很好的工作:
我先开一个进程并在事务中设了断点,即执行完上面的Select语句后,但事务并不提交,然后我
在其他机器执行包含有上述代码的程序,按理由于其他事务加了预先锁,此时此程序应该等待,
可是他却一路执行下去!更怪的是如果我把表中的年份改为2000,则在其他机器执行包含有上述
代码的程序会先等待!也就是说当我表中的数据为:
Bh Nd Jd Lb Xmbh
0000000001 2000 1 1 0101
0000000001 2000 1 2 0101
=================================
UpdLock可以很好的工作
对不起,问题有点长但为了把问题描述清楚也只有委曲各位高手了。