笑萧亦然


  做一个有用的程序员
  每天都有前进的方向,每天都有新的起点。当我白发时才会有回忆的往事。
posts - 39, comments - 7, trackbacks - 0, articles - 2
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2011年3月21日


SET LOCK_TIMEOUT 1800 

SET TRANSACTION ISOLATION LEVEL READ COMMITTED


BEGIN TRANSACTION

DECLARE @PRD_NO VARCHAR(30)
DECLARE @CUS_NO VARCHAR(20)
DECLARE @STD_LEVEL VARCHAR(10)
DECLARE @USR VARCHAR(12)

DECLARE MY_CURSOR CURSOR FOR
SELECT DISTINCT PRD_NO,CUS_NO,STD_LEVEL,USR FROM CUS_ML_GGEC HOLDLOCK WHERE PRD_NO+'*'+CUS_NO NOT IN (SELECT PRD_NO+'*'+CUS_NO FROM PRDT_AUTH )

OPEN MY_CURSOR

    FETCH NEXT FROM MY_CURSOR INTO @PRD_NO,@CUS_NO,@STD_LEVEL,@USR

    WHILE (@@FETCH_STATUS = 0)
        BEGIN
            INSERT INTO PRDT_AUTH (PRD_NO,CUS_NO,ZS_NO,STD_LEVEL,USR,SYS_DATE,CLS_ID)
            VALUES( @PRD_NO,@CUS_NO,@PRD_NO+@CUS_NO,@STD_LEVEL,@USR,GETDATE(),'T' )
            FETCH NEXT FROM MY_CURSOR INTO @PRD_NO,@CUS_NO,@STD_LEVEL,@USR       
        END

IF @@ERROR = 0
    COMMIT TRANSACTION
ELSE
    ROLLBACK

或者:

CLOSE MY_CURSOR
  DEALLOCATE MY_CURSOR

 

SET TRANSACTION ISOLATION LEVEL READ COMMITTED


 

posted @ 2011-03-21 17:50 笑萧亦然 阅读(25) 评论(0) 编辑

 

1 如何锁一个表的某一行
A 连接中执行
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
select * from tablename with (rowlock) where id=3
waitfor delay '00:00:05'
commit tran
B连接中如果执行
update tablename set colname='10' where id=3 --则要等待5秒
update tablename set colname='10' where id<>3 --可立即执行
2 锁定数据库的一个表
SELECT * FROM table WITH (HOLDLOCK) 
注意: 锁定数据库的一个表的区别
SELECT * FROM table WITH (HOLDLOCK) 
其他事务可以读取表,但不能更新删除
SELECT * FROM table WITH (TABLOCKX) 
其他事务不能读取表,更新和删除

posted @ 2011-03-21 17:43 笑萧亦然 阅读(141) 评论(0) 编辑