天空是蓝色的

做好软件为中国 #gcc -c helloworld.c -o helloworld.o //编译目标文件 #gcc helloworld.o -o helloworld //编译成可执行exe #helloworld //运行exe
数据加载中……
如何取得新增记录的自动编号字段的值

数据库 MS-SQL server 2000
表 Infos 有一自动编号字段 sid
我用如下方法向表中新增一条记录
stmt = con.createStatement();
stmt.executeUpdate(sql);
有没有办法取得该新增记录的自动编号字段sid的值?
ASP有这样的做法
rs.open "select * from Infos where sid is null",conn,3,3
rs.addnew
rs("AA") = AA
..
rs.update
''然后取得该记录的sid的值
SID = rs("sid")
请教java里有没有类似的方法?不要告诉我用取最大的值的方法。
如果短时有多个新增记录,用取最大值的方法可能不准确。
请各位大侠帮忙看看,百分感谢~~!

我的做法是,首先找到这个自增字段的名字,比如SEQ_AUTH_CERT_ID;
如果要得到最新更新的id就首先
String sql1="select SEQ_AUTH_CERT_ID.nextval from dual";
去得到这个最新的id!然后再insert!

要分两部走的~~
update 之后是不能直接获得IDENTITY列的值的。
你必须在select才能获得。
当然还有方法是一步可以实现的,先打开ResultSet
设定游标类型是可修改的。
此时你就可以获得列的值,也可以对记录进行修改。

不同的数据库有不同的方法.SQLServer可以执行insert语句后从系统变量@IDENTITY中取得主键值,Oracle可以从序列中取得就是楼上的Sequence.nextval后再插入到表中。

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity',@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。
@@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。
你可以看一下SQLServer的联机帮助中的相关章节

用insert 语句添加后,再select * from infos order by sid desc 再在结果集把第一条记录拿出来(第一条就是新增记录的sid)
需要session

posted on 2005-11-08 08:31 bluesky 阅读(1784) 评论(0)  编辑  收藏 所属分类: 关系数据库


只有注册用户登录后才能发表评论。


网站导航: