建立一个表单,两列:
spname,AccessLock=1
当调用时,先检查对应的AccessLock,如果为1,减1,并执行,否则退出报告Access violation.
spname,AccessLock=1
当调用时,先检查对应的AccessLock,如果为1,减1,并执行,否则退出报告Access violation.
解决方案 »
- 请教一个利用表中原有record信息再插入表的SQL
- 标点符号全角用半角替换,求实现方案
- 祝福SQL的兄弟姐妹们[DC问个问题]
- 在B表里有多条数据对应A表里一条数据,现在我要选出A表里所有数据,同时B表里和A表里相关的数据也选出来,但只能在B表里选时间最大
- 请高手解决一个sql的写法!
- 怎么把mysql转成sql server
- 请教一个SQL语句的问题
- 导出数据库操作是不是只能把表内容导出,存储过程该如何加
- 关于oracle实例
- 请问在sql server7.0中我要查询3天以内,一周以内,15天以内,1个有以内的数据时该怎样进行??谢谢!!
- 大家帮我看看这段SQL代码(很简单的)
- 在软件发布时,是否一定要安装SQL Server?
spname,AccessLock=1
当调用时,先检查对应的AccessLock,如果为1,减1,并执行,否则退出报告Access violation.
两个进程同时执行的话,AccessLock会等于-1,你的方法不行。
应在执行存储过程之前锁定表。创建新表
CREATE TABLE [dbo].[TABLE22] (
[spname] [varchar] (128) NOT NULL ,
[status] [tinyint] NOT NULL
) ON [PRIMARY]
GObegin tran
--锁定表
update TABLE22 set status=1 where spname='sp_name'
exec sp_name
update TABLE22 set status=0 where spname='sp_name'
commit tran
CREATE PROC myProc
AS
if(TABLE22.status=1)
BEGIN
update TABLE22 set status=status-1 where spname='sp_name'
EXEC sp_name
END
else
return
GO
你是不是指的两个进程同时进入if(TABLE22.status=0),那确实会出现statu=-1的情形,谢谢指教!
两个进程同时执行时,用事务处理会使另一个处于等待状态吗?
如果能行,那我在每个存储过程中加入事务处理就可以了,
为什么还要额外通过另一张表的状态来控制呢?
所以只要你一进这个存储过程就写上一句 UPDATE TABLE1 SET COL1 =COL1
就可以把TABLE1上锁(当然这是上锁最笨的方式,但很简单),当另一个存储过程也想调用这句的时候,因为表已经上锁这个存储过程只能暂时挂起,直到地一个存储过程提交或回滚事务放开了锁后,第二个存储过程才能锁表