2012-07-27 102 views
0

如何批量插入多個記錄並快速獲取每個記錄的最後插入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

回答

0

快速執行此操作的方法是在存儲過程中使用批量插入。您最終將運行查詢以獲取所有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