OS:win7 or windows2003
DB:sql2008R2
create table sybh --所有编号
(bh varchar(10) null defautl '',
mc varchar(20) null default '') create table ysybh --已使用编号
(bh varchar(10) null defautl '',
mc varchar(20) null default '') 表sybh中有2000条数据、ysybh中有600条数据,现在需要在sybh中检索出一个编号,此编号不存在于ysybh中
检索的方法为
select top 1 a.bh from sybh a where not exists (select bh from ysybh b where a.bh=b.bh)
但是假设有1000个人同时在检索编号 如何能杜绝这1000人同时检索时不会检索出相同的编号来。
DB:sql2008R2
create table sybh --所有编号
(bh varchar(10) null defautl '',
mc varchar(20) null default '') create table ysybh --已使用编号
(bh varchar(10) null defautl '',
mc varchar(20) null default '') 表sybh中有2000条数据、ysybh中有600条数据,现在需要在sybh中检索出一个编号,此编号不存在于ysybh中
检索的方法为
select top 1 a.bh from sybh a where not exists (select bh from ysybh b where a.bh=b.bh)
但是假设有1000个人同时在检索编号 如何能杜绝这1000人同时检索时不会检索出相同的编号来。
把a.bh插到 ysybh 表中,再用一个字段标记起来(表示临时,没有人用的话再回收)。
方法是笨了点。
好像用lock是解决不了的。
ALTER TABLE sybh ADD IsUsed BIT DEFAULT 0--每次调用下面的过程即可CREATE TABLE #bh(bh VARCHAR(10), mc VARCHAR(20)) WHILE 1=1
BEGIN
UPDATE TOP (1) sybh
SET IsUsed = 1
OUTPUT deleted.bh,deleted.mc INTO #bh
WHERE IsUsed = 0
IF @@ROWCOUNT = 1
BEGIN
INSERT INTO ysybh(bh,mc) SELECT bh,mc FROM #bh
BREAK
END
END--#bh表中就是检索出来的编号
SELECT * FROM #bhDROP TABLE #bh
--方法2、增加一个未使用编号的表--之后的方法与方法1类似,只不过将UPDATE改成DELETE即可