一个ID引起的血案

来源:互联网 发布:php自定义加密 编辑:程序博客网 时间:2024/04/29 19:45

最近用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值。

原创粉丝点击