使用记录集批量插入数据并快速返回新ID快速

问题描述:

如何批量插入多个记录并快速获取每个记录的最后插入ID(经典asp/ado)?使用记录集批量插入数据并快速返回新ID快速

我试过这个,但它只能运行在每秒约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插入到select()等中,因为我需要在文本上运行处理函数。

+0

您使用的是哪种数据库引擎? – AnthonyWJones 2012-07-27 15:08:49

+0

SQL Server 2008 R2 – 2012-07-29 15:53:41

+0

我不认为你的问题还没有足够的信息来正确回答它。我们通常谈论多少行?为什么有必要在那里而不是稍后检索ID?该代码看起来“psuedo”给我,你可以充实它使它更真实,目前它是一个无限循环?输入驱动数据如何与创建的行相关,输入数据从何而来? “myFunction”的独特之处在于,相同的函数无法在T-SQL中复制? – AnthonyWJones 2012-07-30 11:46:18

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

+0

“存储过程中的批量插入”如何调用VBScript中定义的'myFunction'方法? – AnthonyWJones 2012-07-27 15:08:33

+0

个人而言,我会先写出一个CSV文件并导入CSV。 – 2012-07-27 15:31:12

+0

如何使用CSV文件获取ID的列表?还有人指出,在这种情况下,myFunction不能在SQL中复制。 – 2012-07-29 15:56:34