谁有好办法?一个没解决的问题!

bejesus 2002-07-11 04:26:33
asp向数据库插入记录,能否同时返回主键(ID)的值?
...全文
16 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Symanteck 2002-07-11
  • 打赏
  • 举报
回复
如果id是自增长的select max(id)...
lanbor 2002-07-11
  • 打赏
  • 举报
回复
你在表中定一个字段,他的值是当前时间的毫秒值。就能起到第二个id的作用。我一般都这样用。很不错。
lanbor 2002-07-11
  • 打赏
  • 举报
回复
用ASP如何获得刚插入数据库的记录的ID号?

1.SQL Server

  对于SQL Server 2000来说,它提供了两个全新的函数(IDENT_CURRENT,SCOPE_IDENTITY),并且改进了@@IDENTITY的不足.当你插入新记录后,可以调用函数:PRINT IDENT_CURRENT('table') '这将获得新的IDENTITY值,不管数据库中是不是有记录添加(这就避免了@@IDENTITY的连接限制),或者:PRINT SCOPE_IDENTITY() '这将获得在当前存储过程,触发器等其他程序创建的最新记录的IDENTITY值.而全局变量@@IDENTITY有一个问题,当对一张表执行insert时,如果该表有触发器程序在执行插入操作,然后,接着在另一张表中插入记录,这样返回@@IDENTITY值就是第二张表的IDENTITY值。

  如果你用的不是SQL Server 2000,你最好一个简单的存储过程来解决这个问题。
  CREATE PROCEDURE myProc
  @param1 INT
  AS
  BEGIN
  SET NOCOUNT ON
  INSERT INTO someTable
  (
  intField
  )
  VALUES
  (
  @param1
  )
  SET NOCOUNT OFF
  SELECT NEWID = @@IDENTITY
  END

  在ASP中你可以这样做:
<%
fakeValue = 5
set conn = Server.CreateObject("ADODB.Connection")
conn.open "<conn string>"
set rs = conn.execute("exec myProc @param1=" & fakeValue)
response.write "New ID was " & rs(0)
rs.close: set rs = nothing
conn.close: set conn = nothing
%>

  2.Access

  对于Access,你可以用下面这样的方法:
<%
fakeValue = 5
set conn = Server.CreateObject("ADODB.Connection")
conn.open "<conn string>"
conn.execute "Insert into someTable(intField) values(" & fakeValue & ")"
set rs = conn.execute("select MAX(ID) from someTable")
response.write "New ID was " & rs(0)
rs.close: set rs = nothing
conn.close: set conn = nothing
%>

  然而对于多人同时向数据库中添加数据,我们就要利用记录集的adOpenKeyset游标来防止出错。例如下面的例子:
<%
fakeValue = 5
set conn = Server.CreateObject("ADODB.Connection")
conn.open "<conn string>"
set rs = Server.CreateObject("ADODB.Recordset")
rs.open "select [intField] from someTable where 1=0", conn, 1, 3
rs.AddNew
rs("intField") = fakeValue
rs.update
response.write "New ID was " & rs("id")
rs.close: set rs = nothing
conn.close: set conn = nothing
%>



bejesus 2002-07-11
  • 打赏
  • 举报
回复
如果插入的是第一条记录,则会出错的!
wzrain 2002-07-11
  • 打赏
  • 举报
回复
如果你的ID是自动增加的,那么只有表更新以后才能生成ID号,你可以让记录上移一个,然后在下移一个,ID就出来了,我就是这么做的
c_qj 2002-07-11
  • 打赏
  • 举报
回复
插入语句后边直接跟着查询语句:select max(id) as maxID from...
leonkim 2002-07-11
  • 打赏
  • 举报
回复
看用的什么数据库。
如果是mysql,使用
select LAST_INSERT_ID();
就可以得到一个自动增加的字段最后插入的值。

如果是其它的数据库,就只能去查它们的使用手册,应该有相应的函数。
lbqlbq 2002-07-11
  • 打赏
  • 举报
回复
插入后,再select max(id) from table

response.write rs(0)

或者再查之前找出最大id,然后加1输出
fokker 2002-07-11
  • 打赏
  • 举报
回复
你的主键(ID)是自动的吗?
fokker 2002-07-11
  • 打赏
  • 举报
回复
你的主键(ID)是自动的吗?
bejesus 2002-07-11
  • 打赏
  • 举报
回复
给出想法就加分!

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧