|zyciis| 第三贴,在事务中,如何锁死一个表中的一条记录,不被其他事务更新和读取呢,不要锁表 谢谢
http://topic.csdn.net/u/20090102/23/2a2ffb74-2bc1-4d59-ad2f-ca38a5bd85da.html?1080139824那在SQL2005中没有没更好的锁
谢谢或者这种情况的话大家是怎么做的谢谢 分表分析谢谢
http://topic.csdn.net/u/20090102/23/2a2ffb74-2bc1-4d59-ad2f-ca38a5bd85da.html?1080139824那在SQL2005中没有没更好的锁
谢谢或者这种情况的话大家是怎么做的谢谢 分表分析谢谢
if exists(select 1 from 编号='你的编号')
returninsert #锁表 values('你的编号').....你处理的代码delete #锁表 where 编号='你的编号'
--------------------------------------
--为了防止死锁,建议加时间:create table #锁表(编号 int,时间 datetime)--代码:
if exists(select 1 from 编号='你的编号' and datediff(ss,时间,getdate())<5 --如果锁的时候超过5秒,则是处理超时
)
returndelete from #锁表
insert #锁表 values('你的编号',getdate()).....你处理的代码delete #锁表 where 编号='你的编号'
---------------------------------------
--锁定记录,只允许单用户修改的例子:--创建测试环境
--创建测试表--部门表
create table 部门(departmentid int,name varchar(10))--记录锁定表
create table lock(departmentid int,dt datetime)go
--因为函数中不可以用getdate,所以用个视图,得到当前时间
create view v_getdate as select dt=getdate()
go
--创建自定义函数,判断记录是否锁定
create function f_chk(@departmentid int)
returns bit
as
begin
declare @re bit,@dt datetime
select @dt=dt from v_getdate
if exists(select 1 from lock where departmentid=@departmentid
and datediff(ss,dt,@dt)<5)
set @re=1
else
set @re=0
return(@re)
end
go--数据处理测试
if dbo.f_chk(3)=1
print '记录被锁定'
else
begin
begin tran
insert into lock values(3,getdate())
update 部门 set name='A' where departmentid=3
delete from lock where departmentid=3
commit tran
end--删除测试环境
drop table 部门
drop view v_getdate
drop function f_chk
----------------------
谢谢 你这里就是上面说的添加表的方法我这一贴问在SQL2005中有没有新的方法来解决这个问题谢谢
INDEX ( index_val [ ,...n ] )
| FASTFIRSTROW
| HOLDLOCK
| NOLOCK
| NOWAIT
| PAGLOCK
| READCOMMITTED
| READCOMMITTEDLOCK
| READPAST
| READUNCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| TABLOCK
| TABLOCKX
| UPDLOCK
| XLOCK
}