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

如何给行加了锁后,使其他的语句连查询都不行
我知道加了rowlock后,其他的语句不能update操作。代码如下
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
select * from dbo.TypesID with (ROWLOCK) where Type='Order'
waitfor delay '00:00:30'
commit tran


update dbo.TypesID set IDValue=30 where Type='Order' --则要等待30秒


但是我想实现的效果是 select * from dbo.TypesID where Type='Order'  也会等待30秒再执行,如何操作?

------解决方案--------------------
你把哪两个字段设置了主键?可以单独给type设置唯一键啊

--你这样写没必要,而且我上面说了,查询出来的数量是不准的
--会话1、2可能同时查询出同一个数量
SET @ID = (SELECT IDValue + 1 
                    FROM dbo.TypesID
                    WHERE [Type]=@Type)
     
                    UPDATE dbo.TypesID
                    SET IDValue = @ID
                    WHERE [Type]=@Type  

--改成
UPDATE dbo.TypesID
                    SET IDValue = IDValue+1
                    WHERE [Type]=@Type