一个ID引起的血案

最近用ASP写程序时,刚开始支持的数据库是ACCESS,程序里有一段代码是往数据库里新添一条记录,方法为先建立一个recordset,然后用addnew和update方法来实现数据新增。addnew之后便能取得新增记录的ID号。

  后来程序移植到服务器上时,由于服务器安装的是SQL SERVER 2000,未安装ACCESS,所以不得不把ACCESS数据库转换为SQL SERVER数据库。转换完之后运行发现,在新增记录时,用recordset addnew之后取不到新增记录的ID号,update之后同样取不到ID号。那个郁闷啊,哦使搞的哦。

  最后发现数据库里有一个参数@@identity,它的作用是返回最后插入的标识值。用select @@identity语句即可获得最后新增这条记录的ID号。有人可能会问,如果两个客户端同时对服务器的数据库执行新增记录的操作,取得的值会是多少?

  对此,作了一个试验:服务器数据库有一表Test,里边有一条记录,ID=1,首先客户端[马云]新添了一条记录,此时Test表新加入的记录ID值为2,select @@identity值显示也为2;然后客户端[比尔·盖茨]新添了一条记录,Test表新增记录的ID值为3,select @@identity值显示为3。这个时候[马云]再执行select @@identity,返回值仍旧是2,令[马云]大吃一惊,令[比尔·盖茨]大跌眼镜!没想到select @@identity只与当前产生的会话有关系,在不同客户端出现并发操作时不会影响某个客户端的@@identity值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值