修改时 begin tran update table with(rowlock) set ... where ... if (@@error<>0) or (@@rowcount=0) begin rollback tran return end else begin commit tran tran end
晕,写错了 修改时 begin tran update table with(rowlock) set ... where ... if (@@error <>0) or (@@rowcount=0) begin rollback tran return end else begin commit tran tran ---应该是return end
晕,写错了 修改时 begin tran update table with(rowlock) set ... where ... if (@@error <>0) or (@@rowcount=0) begin rollback tran return end else begin commit tran tran --应该是return end
修改时 begin tran update table with(rowlock) set ... where ... if (@@error <>0) or (@@rowcount=0) begin rollback tran return end else begin commit tran tran end 看起来 象sql 2k 中语句 在哪里写?表的 触发器?????
begin tran
update table with(rowlock)
set ...
where ...
if (@@error<>0) or (@@rowcount=0)
begin
rollback tran
return
end
else
begin
commit tran
tran
end
修改时
begin tran
update table with(rowlock)
set ...
where ...
if (@@error <>0) or (@@rowcount=0)
begin
rollback tran
return
end
else
begin
commit tran
tran ---应该是return
end
修改时
begin tran
update table with(rowlock)
set ...
where ...
if (@@error <>0) or (@@rowcount=0)
begin
rollback tran
return
end
else
begin
commit tran
tran --应该是return
end
1.悲观锁
先创建一张锁表,当二个用户同时访问一个订单时(这里订单指的是一个抽象模型),用户的动作首先为签出操作,即当用户签出该订单后,方可有对该订单的编辑权限,在签出的同时,也就向锁表中插入一条加锁信息,该加锁信息表明其有效期限,以及何人,何时的签出操作,另一个用户想要访问该订单时首先看一下是否被其它用户签出,来决定其是否能修改该订单。这种方法破坏了工作的并行性。
2.乐观锁
大多是基于数据版本 (Version)记录机制实现。在基于 数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来 实现。 读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提 交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据 版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
begin tran
update table with(rowlock)
set ...
where ...
if (@@error <>0) or (@@rowcount=0)
begin
rollback tran
return
end
else
begin
commit tran
tran
end 看起来 象sql 2k 中语句 在哪里写?表的 触发器?????
关键是现在程序做完了,还要一个一个修改整个项目的SQL?不太现实!
你可以参考一下ASP.NET是如何进行控制并发性更新的~