难难难难难难难!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

skyhh 2004-04-08 04:36:35
怎样得到最新插入行的字段!
(不能是别人插入的,只能是自己插入的)

我现在是建了一个表做为我系统里的主表!
在系统里每执行一个操作就先会写在这个主表里!然后跟据写在这个表里的唯一标识,再写到其它附表里!(根据这个表里的唯一标识来关联)

可问题是,有个并发性,如果同时有很多人用的话,就怕取错了!
目地:得到插入在主表里的唯一标识!

打个比方吧!我开始在主表里插入了一行,唯一ID是100,正要取得刚插入的这行的唯一标识时!可另一个人,也向表里写了一行,唯一ID是101,所以到后来我取得的是101!

就是怎样避免这个问题,在我插入的时候,锁定这个表!
我用的是SQL2000
...全文
41 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Denver_Du 2004-04-21
  • 打赏
  • 举报
回复
我看也是得先锁表后INSERT而后SELECT 最后解锁.

当,表处于锁定状态时,只可以读不可写.
skyhh 2004-04-09
  • 打赏
  • 举报
回复
各位大哥说了这么多好方法,可是都不行呀!
小弟觉得,如果要实现我这方法,大体思想是这样的!

在我执行插入操作的时候,不能有别人来操作表!

所以解决方法是要在我操作的时候锁住表!有没有锁表的方法呀!
skyhh 2004-04-09
  • 打赏
  • 举报
回复
kanshangren(小彻小悟)
SESSIONID当然不太可能有重复的了
===============================
但还是可能会有重复的呀!

cjf1009(农民程序员)====你的这种方法是人工来干预的,不是很好,还有时间,也有可能会有重复的!

fengqingwanzhong(风情万种)====1,3不支持bookmark属性,我也试了很多支持的会有
提供者不能确定该值。原因可能是:记录刚刚创建,该字段的默认值不可用,或用户未设置新值

smoked(眼前一黑)=====指针是在最新的一条,可是读不出的是空值呀!

caoshangfei(草上飞)====先执行insert,再执行select @@identity,是能得到最大!但这是两条语句呀!可还是有可能在自己执行insert后,别人也执行了一条insert,这也不能保证是自己的ID呀!

caoshangfei 2004-04-08
  • 打赏
  • 举报
回复
如果你的id在主表中是自动增长id的话。插入记录后,可以用select @@identity来获得刚插入的记录的id号。
strSql="select @@identity"
rs.open strSql,conn,1,1
Id=rs(0)
xylegend 2004-04-08
  • 打赏
  • 举报
回复
up
smoked 2004-04-08
  • 打赏
  • 举报
回复
如果用 RecordSet.AddNew 插入记录,
RecordSet.Update 之后,它的指针就处于刚插入的记录上
cxj1976 2004-04-08
  • 打赏
  • 举报
回复
首先须保证获得记录集的方式支持bookmark属性,如1,3

插入一条带自动编号字段的记录后,获取该记录的bookmark属性值


temp = rs.bookmark


试试!!

Response.write rs.Fields("ID").Value
cjf1009 2004-04-08
  • 打赏
  • 举报
回复
不建议用自增的字段,可以先生成id,再把id插进去。
Set rs= Server.CreateObject("ADODB.RecordSet")

sql1="select top 1 car_id from find_car_info where car_id like '"&str_leixing&"%"&"' order by car_id desc"//先取出最大id
rs.open sql1,conn,1,3
if not rs.eof then
str_carid=str_leixing&year(now)&right(cstr(cint(right(rs("car_id"),5))+100001),5)
else
str_carid=str_leixing&year(now)&"00001"//库里没有记录时的情况
end if

还可以用当前时间转换成字符串作为id,就肯定不会错了。
kanshangren 2004-04-08
  • 打赏
  • 举报
回复
SESSIONID当然不太可能有重复的了
Denver_Du 2004-04-08
  • 打赏
  • 举报
回复
看来这个问题只能软着陆啦!
skyhh 2004-04-08
  • 打赏
  • 举报
回复
swich(学无纸尽)能不能详细点!
sessionid不会有重复的吗???????????
请教!!!!!!
skyhh 2004-04-08
  • 打赏
  • 举报
回复
stefli((桂电))
我也试了!
先是在页面里用了application.lock但没有用application.unlock

然后再我的机器上执行了,得到了最后一条的唯一ID
这时我没用application.unlock的话,别人访问相同的页面就会报错吧!
可我在另一台用的时候,没有报错呀!也能得出最后一条的唯一ID
点解!!!
swich 2004-04-08
  • 打赏
  • 举报
回复
数据库加个字段,把sessionid读进去,那肯定不会错了
stefli 2004-04-08
  • 打赏
  • 举报
回复
application.lock
sql="insert into [table] values(...)"
set rs=conn.execute(sql)
...
..
application.unlock

在操作的时候允许只有一个人占用
skyhh 2004-04-08
  • 打赏
  • 举报
回复
RickyHuang(南山流水)
并发!并发!并发!并发!并发!并发!并发!并发!并发!
RickyHuang 2004-04-08
  • 打赏
  • 举报
回复
用个时间戳类型标识一下数据版本就可以了

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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