asp如何取得新插入记录的ID(ACCESS库和MSSQL方法不同)

ACCESS库可以这样书写:

ASP/Visual Basic代码
  1. set rs = server.createobject("adodb.recordset")    
  2. sql = "select * from table   
  3. rs.addnew   
  4. rs("title") = "title"   
  5. rs("content") = "content"   
  6. rs.update   
  7. newid = rs("id")    
  8. rs.close    

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

ASP/Visual Basic代码
  1. set rs = server.createobject("adodb.recordset")    
  2. sql = "select * from table   
  3. rs.addnew   
  4. rs("title") = "title"   
  5. rs("content") = "content"   
  6. rs.update   
  7. rs.movelast   
  8. newid = rs("id")    
  9. 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语句的漏洞

 



上一篇: php中用正则表达式匹配utf-8编码和GB2312编码的汉字
下一篇: asp之字符串操作函数
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: asp
相关日志:
评论: 0 | 引用: 0 | 查看次数: 3074
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑