对了,是不是可以对此存储过程首尾加上begin tran和commit tran呢
第二个用户要调用的时候先判断一下:IF @@TRANCOUNT > 0,只是这个办法只适用调用此一个存储过程,如果在调用此过程时还有其他tran在调用中,可能就行不通了,不过是不是还可以再在tran上想点办法呢
第二个用户要调用的时候先判断一下:IF @@TRANCOUNT > 0,只是这个办法只适用调用此一个存储过程,如果在调用此过程时还有其他tran在调用中,可能就行不通了,不过是不是还可以再在tran上想点办法呢
解决方案 »
- 必须声明变量 '@pageCount'。
- 谢谢刚刚几位热心的人.,可是我想用我们那种写法实现啊
- 邹大哥在没,问个跟数据库无关的问题!
- SELECT COUNT(*)FORM(SELECT a,b FROM t_TABLE GROUP BY a,b )是错误的,高手赐教!!!!!急
- 存储过程的问题!!
- 怎样在查询中实现多级小记和汇总?(在线等待)
- →★☆★←行列转换加时间排序,怎么办?→☆★☆←
- 自动备份出现多个bak文件求助!
- 帮忙写一个SQL!!
- 《求助》-sql server 2005安装完后 配置服务时没有服务选项怎么办
- 关于远程访问数据库的问题,300分为您准备着:
- 谁知道从数据文件中还原数据库的存储过程?
begin tran
select @isRun = flag from control_table with XLOCK
where name = 'RUN_FLAG'
if @isRun
begin
rollback tran
return -1
endupdate control_table set flag = 1 where name = 'RUN_FLAG'
commit tran--其他执行代码
select @isRun = flag from control_table with XLOCK
是什么意思?谢谢!
to hcgui(浪子),你问得好,再麻烦bluepower2008(蓝色力量)解释一下
to hcgui(浪子),你问得好,再麻烦bluepower2008(蓝色力量)解释一下非常感谢!
不过感觉这个还是不对,在select完毕之后与update之前其他进程有可能进入。
不如对整个事务设置最高隔离级别。或者利用单个update语句:
update yourtbl set flag=1 where flag=0
if @@rowcount>0
...
to wanghu(不懂就是不懂):在select语句中指定锁类型,该锁会保持到由语句所处理的全部数据上的事务结束,所以我在select语句前加上了begin tran,在该事务没有回滚或提交前,select出来的记录都不会被其他进程操作,不会出现你感觉的问题。
当然使用你所说的对整个事务设置最高隔离级别,也是可以,但这种方式的并发级别很低,在编程时应尽量避免。另外,回答shenxin(木头)的问题:
1。加锁时间不会很长,应该是毫秒级,在加锁时,其他的调用只有等待锁的释放,如果锁的时间很长,最后得到的错误提示是执行sql语句超时。超时时间在设置服务器时指定,可由程序对特定的操作指定特定的超时时间。
2。对整个事务设置最高隔离级别的语句是:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
能交个朋友吗,我是初学SQL SERVER,有很多问题呢
我也刚学不就,咱们也可以聊聊。[email protected]
可以,在数据库版块,大家就是朋友。
朋友多多--〉[email protected]
我的Email: [email protected]
OICQ:2581130