打断你一下,我觉得holdlock不能解决问题,insert的时候,系统对表加的是意向锁,在事务没结束过程中意向锁没有被释放,所以我觉得用holdlock多余的,请赐教
[此贴子已经被作者于2007-1-29 15:18:14编辑过]
行级锁是保持的,但是insert不受影响
begin tran
insert into student select 2,'aa'
这句执行完后
spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- ---------------- -------- ------
51 7 0 0 DB S GRANT
51 7 2105058535 0 RID 1:15:0 X GRANT
51 7 0 0 PAG 1:15 IX GRANT
51 1 85575343 0 TAB IS GRANT
51 7 2105058535 0 TAB IX GRANT
行级锁行保留着
begin tran
insert into student with(holdlock) select 6,'kk'
这句执行完后结果和上面一样
spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- ---------------- -------- ------
51 7 0 0 DB S GRANT
51 7 2105058535 0 RID 1:15:0 X GRANT
51 7 0 0 PAG 1:15 IX GRANT
51 1 85575343 0 TAB IS GRANT
51 7 2105058535 0 TAB IX GRANT
begin tran
select * from student
这句执行完之后
spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- ---------------- -------- ------
51 7 0 0 DB S GRANT
51 1 85575343 0 TAB IS GRANT
行级锁解除了
begin tran
select * from student with(holdlock)
这句执行完之后
spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- ---------------- -------- ------
51 7 0 0 DB S GRANT
51 1 85575343 0 TAB IS GRANT
51 7 2105058535 0 TAB S GRANT
共享锁还保留着
那你试试用另外个事务去select * from students 看能不能访问到? 如果不能的话 那就确实是什么也不用做 自然好...
也不能做了,是不是行被锁住了,没法查询了