请教给数据表加锁的写法?
SQL2000:
有一个存储过程,在同一时间内只允许执行一次。也就是说在一个人执行的时候别人是不允许执行的。
BEGIN TRANSACTION
insert into T_A with(tablock) (SynDatetime,SynOperator) Values(getdate(),@OPNAME)
if @@ERROR=0 and @@ROWCOUNT>0
begin
set @RID=SCOPE_IDENTITY()
--------------
若干条 insert \ update \ delete \ select
--------------
update T_A set SynStatus=1,SynEnd=getdate() where SynID=@RID
end
COMMIT TRANSACTION
问题1:这种给表加锁的写法对吗?
我这样写是否可以保证 在事务执行期间 T_A 表是锁定的?
是否必须要像这样: select * from T_A WITH (tablock) 给表加锁?
问题2: tablock 换成 UPDLOCK 是否也行?就我的需要来说那个更好一些?
问题3:除了用锁以外还有没有更好的办法?
谢谢