22,209
社区成员
发帖
与我相关
我的任务
分享
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)
其他事务不能读取表,更新和删除
DECLARE @SN Int, @SName NVarChar(100)
SELECT Top 1 @SN = SN, @SName = SName FROM T2
DELETE FROM T2 WHERE SN = @SN
WHILE @@RowCount = 0
BEGIN
SELECT Top 1 @SN = SN, @SName = SName FROM T2
DELETE FROM T2 WHERE SN = @SN
END
INSERT INTO T3
SELECT @UserID AS UserID, @SN, PNo, @SName, PName
FROM T1
WHERE SN = @SN
--获取和删除SN地方,建议修改如下:
DECLARE @SNs table(SN int)
DECLARE @SN int
DELETE TOP (1) FROM T2 WITH (READPAST) OUTPUT DELETED.SN INTO @SNs
SELECT @SN = SN FROM @SNs