2013-12-09 109 views
0

我正在尋找一種方法來加速SQL,因爲我認爲我沒有有效地做它,雖然它工作但有很多記錄時很慢。SQL Server 2008 - 多個更新與循環

我正在使用ASP/VBScript,但這是SQL更新問題。

我有一個循環FOR, NEXT,捕獲提交表單和流程以捕獲提交的SortNum

for x = 1 to request.form.count 
    ' -- Some where here, I captured the SortNum that associated with RecID 
    SortNum = TheCapturedRowNum 
    TheRecID = TheCapturedRecID 

    sql_UpdateSortNum = "Update Table1 SET SortNum = '"& SortNum &"' where RecID = '"& TheRecID "'" 
    conn.execute(sql_UpdateSortNum) 
Next 

目前,它正在工作,但更多的記錄(超過50條記錄),它會變得更慢。我想這是一個糟糕的方式來循環並繼續執行更新查詢。有沒有辦法加快更新,如存儲和更新一次?請注意0​​的值不是FOR循環的(x)。

任何意見,將不勝感激,

謝謝

回答

1

1 /發送所有行「的Request.Form」存儲過程(具有XML data typetable value parameter參數),然後使用UPDATE FROM聲明。

這樣可以避免對數據庫的來回調用。如果你不想修改太多你的代碼,並且如果你有合理數量的行更新,你可以加入更多的更新語句(比如說批量包含大約50條更新語句)併發送他們一起到DB:

"Update Table1 SET SortNum =...;Update Table1 SET SortNum =...;Update...;" 
+0

對不起,我不知道我明白。所以,我仍然需要循環,但是我不應該使用代碼中的更新,而應該創建一個帶有2個參數(RecID,SortNum)的存儲過程,然後在我的存儲過程中使用Update SQL,正確嗎?基本上,我仍然需要遍歷存儲過程並將2個參數提供給更新存儲過程?任何例子,都會被認可! – milacay

+0

@milacay你應該遍歷你的記錄並創建一個XML格式的字符串。然後,將該字符串發送到接受XML參數的存儲過程。 – Mike

+0

@milacay:UPDATE FROM允許您在單個UPDATE語句中更新更多行。 –