文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>20110215 学习记录:ASP获取新添加数据的ID号 SELECT @@IDENTITY

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

 

 

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载