多人提取数据的问题

haishen 2003-10-18 09:38:45
SQL-SERVER数据库中的一个表,我用程序对这个表进行提取,由于是一个多人同时使用的程序,所以每次只提取20条数据,请问:如果才能避免提取相同数据的问题。例:表中有100条数据,有5个人同时使用这个程序,请问如何才能让每个人各提取20条数据,并且数据是不相同的,注:5个人是同时提取数据的。


请大家给点意见,我这里先谢谢了!
...全文
32 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
haishen 2003-10-21
  • 打赏
  • 举报
回复
能不能问一下,如何锁定呢?
cjfzy 2003-10-21
  • 打赏
  • 举报
回复
做一个临时表,大家都到这个临时表里面读数据,这个临时表里的数据被读出后第一条做标记,用存储过程更新临时表里的数据;
读时,做循环,检测临时表里第一条是否有标记,没有——〉跳出循环——〉读数据——〉执
行存储过程,更新临时表里数据;
有——〉继续循环。
ydq2003 2003-10-19
  • 打赏
  • 举报
回复
这样做很麻烦的,很少有人做这个功能
zsy_good 2003-10-19
  • 打赏
  • 举报
回复
sql server 回自己处理这问题,在同时也不可能在毫秒相同,
而且如果相同,你可以采用锁定的办法,在提取的时候,别人不能提取
haishen 2003-10-19
  • 打赏
  • 举报
回复
楼上,我会按你的设计试一下,不过有一个小问题,你主要的操作是用UPDATE改变一个记录值,再提取数据,可如果特别巧的状态,5个人同时按下提取,也就是5个UPDATE同时进行,SQL SERVER数据库会有什么反应昵?
csntgao 2003-10-19
  • 打赏
  • 举报
回复
放一个整形字段SessionID,然后
declare @SessionID integer
Select @sessionID= 随机数
update TableName set SessionID=@SessionID where KeyID in(select Top 20 KeyID from TableName where @sessionID=0)
//选出这些数据作为返回值
select * from TableName where SessionID=@SessionID

//进行你要的操作
//最后
update TableName set SessionID=0 where SessionID=@SessionID

总体思路是这样子的,希望你能够看懂!
hiflower 2003-10-19
  • 打赏
  • 举报
回复
这种情况想来是有一定意义的,比如录入大量信息,就可以分成多人同时录入。

再添一个表 state,两个字段:keyfield,statefield
keyfield 与主表对应,statefield 表示可读取状态,true 表示可读,false表示不可读。
通过存储过程来获取 statefield=true 的 20 条记录,同时把这些记录对应的 statefield 置为 false。
通过存储过程来提交修改,如果需要,可同时把这些记录对应的 statefield 置为 true。
haishen 2003-10-19
  • 打赏
  • 举报
回复
那这种情况大家都是怎么解决的呢?
XRS 2003-10-19
  • 打赏
  • 举报
回复
碰到这问题很久了,好象没有很好的方法
haishen 2003-10-18
  • 打赏
  • 举报
回复
楼上,请问如何做呀!
softcai 2003-10-18
  • 打赏
  • 举报
回复
可以通过设定SQL-SERVER存储过程解决问题。
IORILI 2003-10-18
  • 打赏
  • 举报
回复
建立一个临时表,存进去,同时删除提取的记录,操作完后再insert
haishen 2003-10-18
  • 打赏
  • 举报
回复
楼上,请问如何锁定一个表,而且在表锁定时别人再读取时会出现什么结果呢
hthunter 2003-10-18
  • 打赏
  • 举报
回复
先锁定表后再更新
laocaomail 2003-10-18
  • 打赏
  • 举报
回复
用事务处理
haishen 2003-10-18
  • 打赏
  • 举报
回复
楼上,这办法我不是没想过,可是SQL语句的UPDATE不能指定前多少条呀,如果先用SELECT语句提出20条再在程序中用循环更改记录,这时间其他人早已经提走了数据,不仅解决不了问题,而且还会使程序报错。

再请各位大侠帮忙!
hiflower 2003-10-18
  • 打赏
  • 举报
回复
难题,UP
zzlingaaa 2003-10-18
  • 打赏
  • 举报
回复
记录里多加一个Bool字段,被读取时设置为TRUE,释放时设置为False.
愚见~

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧