【问题标题】:Bulk insert data using recordset and return new ID's quickly使用记录集批量插入数据并快速返回新 ID
【发布时间】:2012-07-27 22:17:21
【问题描述】:

如何批量插入多条记录并快速获取每条记录的最后插入ID(经典asp/ado)?

我已经尝试过了,但它只能以每秒 3 行左右的速度运行,这真是个笑话。

rs.Open "myTable", cn,adOpenKeyset, adLockOptimistic
do while NOT rs.EOF   
    rs.AddNew        
    rs("text") = myFunction() ' returns some text.
    rs.update
    lastid = rs("id") ' get new id and so something
loop

使用普通的 adOpenForwardOnly(不返回最后插入的 ID),它的运行速度提高了大约 1000 倍。

任何人都可以建议解决上述问题或替代解决方案吗?我必须在代码中执行此操作,而不是直接将 sql insert into ... select() 等,因为我需要对文本运行处理函数。

【问题讨论】:

  • 你使用的是什么数据库引擎?
  • 我认为您的问题中的信息不足以正确回答。我们通常谈论多少行?为什么有必要当时而不是稍后检索 ID?代码在我看来是“伪”的,你能把它充实起来,让它更真实,目前它是一个无限循环吗?输入的驱动数据如何与创建的行相关,输入数据来自哪里? myFunction 有什么独特之处,以至于无法在 T-SQL 中复制相同的功能?

标签: asp-classic ado adodb recordset


【解决方案1】:

快速执行此操作的方法是在存储过程中使用批量插入。您最终会运行一个查询来取回所有 ID,但这会减少主要瓶颈:访问数据库的次数。

【讨论】:

  • “存储过程中的批量插入”如何调用VBScript中定义的myFunction方法?
  • 就我个人而言,我会先将其写入 CSV 文件并导入 CSV。
  • 如何使用 CSV 文件获取 ID 列表?同样正如有人指出的那样,在这种情况下,无法在 SQL 中复制 myFunction。
猜你喜欢
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多