20110215 学习记录:ASP获取新添加数据的ID号 SELECT @@IDENTITY
时间:2011-02-15 来源:小奈鲁
我的代码试了几次都不好用,不是缺少对象就是什么也取不出来。
因为 SELECT @@IDENTITY 要求在insert语句后使用,不然连接断了就取不到序号只能取到null了
试来试去觉得是执行sql语句的代码有问题
insert一般用
conn.Execute(query) 而select则需要用结果集打开: rs.Open query, conn
把两句sql一起执行的话,上面两种方法执行都会出错
查了半天,网上查到的方法终于好用了——
第一种方法:@@IDENTITY
特点:支持sql Server 和ACCESS
''隐式调用Command对象
sql = " INSERT INTO admin_user (a_user) VALUES (''aaa'')"
Conn.Execute(sql)
sql = "select @@identity AS ID "
''sql = "Select IDENT_CURRENT(admin_user) AS ID" ''access 不支持
Set rs = Conn.ExeCute(sql)
Response.Write(rs(0))
''显示调用Command对象
sql = " INSERT INTO admin_user (a_user) VALUES (''aaa'')"
Conn.Execute(sql)
Set comm = Server.CreateObject("adodb.command")
comm.CommandText="select @@identity"
comm.ActiveConnection = conn
Set rs = comm.Execute()
Response.Write(rs(0))
第二种方法:IDENT_CURRENT(table_name)
第三种方法:SCOPE_IDENTITY ()
而第一种方法要求,必须用Jet引擎打开数据库连接。
后两种方法,不能使用在ACCESS中,它们是sql的内置函数。
实际的代码运用:
set rs = server.CreateObject("adodb.recordset")
sql = "select top 0 * from item1"
rs.open sql,cn,3,3
rs.addnew
rs("clstype")=1
rs("ccode")="07"
rs("itype")=1
rs("cn")=sXh
rs.update
rs.close
sql = "select @@identity AS ID "
Set rss = Cn.ExeCute(sql)
Response.Write(rss(0))
w newId & " " & sXh & "<br />"
response.Flush()
http://hi.baidu.com/yyjjbb/blog/item/43e0ccf8f2ced203d8f9fd50.html
整理后我的code:
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open CONNECTION_STRING
query = "INSERT INTO ..."
conn.Execute(query)
Set comm = Server.CreateObject("adodb.command")
comm.CommandText = " SELECT @@IDENTITY "
comm.ActiveConnection = conn
Set rs = comm.Execute()
//取到我需要的值 rs(0)
query = " INSERT INTO.....
@@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。
一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。
比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。
使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。
/* 对于想要得到一个表中的最后一个插入操作所产生的ID的最好用IDENT_CURRENT('TBName')*/
INSERT INTO table(field1,field2,...) VALUES("field1Value","field2Value",...) SELECT IDENT_CURRENT('recordID') as newIDValue
/*对于马上使用的刚才插入的新记录ID用SCOPE_IDENTITY()是最合适的*/
INSERT INTO table(field1,field2,...) VALUES("field1Value","field2Value",...) SELECT SCOPE_IDENTITY() as newIDValue
/*对于想要得到一系列的操作中最后得到的那个自增的ID最好用@@IDENTITY*/
INSERT INTO table(field1,field2,...) VALUES("field1Value","field2Value",...) SELECT @@IDENTITY as newIDValue