日期:2014-05-17  浏览次数:20604 次

SQLSERVER 如何实现select行级锁
在程序中需要实现:第一个用户查询完后讲这条数据锁定,如果第二个用户想要查询相同数据需要等到第一个用户完成其它操作后解锁才能进行查询(排队等待过程);试过rowlock,xlock,貌似没什么效果;有大牛知道其它什么好方法吗??
数据库多用户并发访问问题 SQLSERVER SELECT行级锁

------解决方案--------------------
举个例子..

-- 建测试表
create table zc
(id int not null,
 col1 char(4000),
 col2 char(4000)
 constraint pk_zc primary key clustered(id)
)

insert into zc
 select 1,'aaa','bbb' union all
 select 2,'ccc','ddd' union all
 select 3,'eee','fff' union all
 select 4,'ggg','hhh' union all
 select 5,'iii','jjj'


-- 在连线1执行
begin tran
 --[查询某条数据]
 select * from zc (xlock) where id=2
 
 -- 此时连线2执行 select * from zc (xlock) where id=2 会出现等待.
 
 --[其它操作]
 update zc set col1='sss' where id=4
commit tran

 -- 此时连线2执行 select * from zc (xlock) where id=2 结果返回.

------解决方案--------------------
引用:
Quote: 引用:

举个例子..

-- 建测试表
create table zc
(id int not null,
 col1 char(4000),
 col2 char(4000)
 constraint pk_zc primary key clustered(id)
)

insert into zc
 select 1,'aaa','bbb' union all
 select 2,'ccc','ddd' union all
 select 3,'eee','fff' union all
 select 4,'ggg','hhh' union all
 select 5,'iii','jjj'


-- 在连线1执行
begin tran
 --[查询某条数据]
 select * from zc (xlock) where id=2
 
 -- 此时连线2执行 select * from zc (xlock) where id=2 会出现等待.
 
 --[其它操作]
 update zc set col1='sss' where id=4
commit tran

 -- 此时连线2执行 select * from zc (xlock) where id=2 结果返回.
这我已经试过了,开始第一次执行xlock排它锁可以,但后来我commit后就再也没用了,现在用你以上代码执行select * from zc (xlock) where id=2后再执行一边还是成功,新建查询也能成功


你的一步一步来