asp新加数据记录到库时如何直接取最新生成的ID
成功志
asp新加数据记录到库时如何直接取最新生成的ID
2012-4-26 ok12

ACCESS库可以这样书写:

set rs = server.createobject("adodb.recordset") 

sql = "select * from table 

rs.addnew 

rs("title") = "title" 

rs("content") = "content" 

rs.update 

newid = rs("id") 

rs.close 


SQLSERVER用上面的方法不行,必须在UPDATE后多加一句,rs.movelast.

set rs = server.createobject("adodb.recordset") 

sql = "select * from table 

rs.addnew 

rs("title") = "title" 

rs("content") = "content" 

rs.update 

rs.movelast 

newid = rs("id") 

rs.close 


 


红色的在用中...


SqlServer中的自增的ID的最后的值:


SELECT SCOPE_IDENTITY() --返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。

SELECT @@IDENTITY    --返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值

SELECT IDENT_CURRENT('TbName')--不受作用域和会话的限制,而受限于指定的表。

IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。


一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。


对于马上使用的刚才插入的新记录ID用SCOPE_IDENTITY()是最合适的;

对于想要得到一系列的操作中最后得到的那个自增的ID最好用@@IDENTITY;

对于想要得到一个表中的最后一个插入操作所产生的ID的最好用IDENT_CURRENT('TBName')


--------------另一篇-------------------------------




用法:

conn.Execute("Insert INTO 表名(帐号,密码) VALUES('aaa',123)" )    '添加数据

set rs=conn.execute("Select SCOPE_IDENTITY()")  '获取新ID

newsid=rs(0)    'newsid为你表中的id

rs.close


'说明===========================!


'SCOPE_IDENTITY()

'取得当前会话最新生成记录的所生成的自动id值ID

'当前会话修改的任意表~~标识ID(自动编号)


IDENT_CURRENT()

'任意会话修改的当前表的最新 标识id ,可以不是你的会话所修改的


@@IDENTITY

'当前回话,并包括SQL触发条件所修改的任意表 标识ID ,可能你的会话修改的返回的是

'SCOPE_IDENTITY() ,而@@IDENTITY可能因TRIGGER而增加新的修改记录,则@@IDENTITY返回后者,SCOPE_IDENTITY()返回你直接修改的


注意1:

select top 1、select max(id) 等在有上百人同时在操作的数据库将会是不准确的~~

可能你取得的id是别人添加的记录id而不是你自己的了!


注意2:

ACCESS不支持'SCOPE_IDENTITY()

ACCESS 使用rs.addnew ........rs.update 后然后直接读取该记录的自动编号

修改insert为 rs.addnew应该不废事

而且从使用SQL语句的安全角度考虑,应该使用rs.open来操作数据库

'不然对非合法数据将可能成为使用注入复合SQL语句的漏洞


MS SQL有三个SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,最常用的就是这个SCOPE_IDENTITY()




========另====================


 


1、通用的


    rs.Update

    set rs=conn.execute("select max(id) as cId from 表名")

    id = rs("id")

    rs.Close

    Set rs = Nothing


2、ACCESS数据库的


     rs.Update

     id = rs("id") '赋值要在update之后

     rs.Close

    Set rs = Nothing


3、mssql 数据库的


    set rs=server.CreateObject("adodb.recordset") 

    rs.cursorLocation = 3 '必要 rs.bookmark

    rs.open sql,conn,1,3


    rs.addnew


    ...


    bm = rs.bookmark

    rs.update 

    rs.bookmark = bm

    id=rs("id")

    rs.close

    set rs = Nothing


 


 


 

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容